社区讨论

数据过水,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 条回复,欢迎继续交流。

正在加载回复...