1 Star 0 Fork 0

duanfaxin/origin

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
_2022_11_26.cpp 1.55 KB
一键复制 编辑 原始数据 按行查看 历史
duanfaxin 提交于 2022-11-26 17:05 +08:00 . 20221126
#include<bits/stdc++.h>
using namespace std;
class Solution {
public:
int encode(int u, int v, int n) {
return u * n + v;
}
int reachableNodes(vector<vector<int>>& edges, int maxMoves, int n) {
vector<vector<pair<int, int>>> adList(n);
for (auto &edge : edges) {
int u = edge[0], v = edge[1], nodes = edge[2];
adList[u].emplace_back(v, nodes);
adList[v].emplace_back(u, nodes);
}
unordered_map<int, int> used;
unordered_set<int> visited;
int reachableNodes = 0;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
pq.emplace(0, 0);
while (!pq.empty() && pq.top().first <= maxMoves) {
auto [step, u] = pq.top();
pq.pop();
if (visited.count(u)) {
continue;
}
visited.emplace(u);
reachableNodes++;
for (auto [v, nodes] : adList[u]) {
if (nodes + step + 1 <= maxMoves && !visited.count(v)) {
pq.emplace(nodes + step + 1, v);
}
used[encode(u, v, n)] = min(nodes, maxMoves - step);
}
}
for (auto &edge : edges) {
int u = edge[0], v = edge[1], nodes = edge[2];
reachableNodes += min(nodes, used[encode(u, v, n)] + used[encode(v, u, n)]);
reachableNodes += min(nodes, used[encode(u, v, n)] + used[encode(v, u, n)]);
}
return reachableNodes;
}
};
int main()
{
return 0;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/duanfaxin/origin.git
[email protected]:duanfaxin/origin.git
duanfaxin
origin
origin
master

搜索帮助