社区讨论
数据过水,Dijkstra过最长路
P1807最长路参与者 18已保存回复 43
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 43 条
- 当前快照
- 1 份
- 快照标识符
- @lo7rygh3
- 此快照首次捕获于
- 2023/10/27 06:47 2 年前
- 此快照最后确认于
- 2023/10/27 06:47 2 年前
我们发现,只要按照点的编号大小成为关键字放入堆,即可通过。
请求加强数据。
dij代码:
CPP#include<bits/stdc++.h>
using namespace std;
typedef pair<int, int> PII;
const int N = 5e4 + 5;
int n, m, d[N], v[N];
vector<PII> g[N];
priority_queue<PII, vector<PII>, greater<PII> > pq;
void dijkstra(){
for(int i = 1; i <= n; i++) d[i] = -1;
memset(v, 0, sizeof(v));
d[1] = 0;
pq.push({1, 0});
while(!pq.empty()){
int x = pq.top().first;
pq.pop();
if(v[x]) continue;
v[x] = 1;
for(PII u : g[x]){
int k = u.first, w = u.second;
if(d[k] < d[x] + w){
d[k] = d[x] + w;
pq.push({k, d[k]});
}
}
}
}
signed main(){
cin >> n >> m;
for(int i = 1; i <= m; i++) {
int x, y, z;
cin >> x >> y >> z;
g[x].push_back({y, z});
}
dijkstra();
cout << d[n];
return 0;
}
回复
共 43 条回复,欢迎继续交流。
正在加载回复...