数据过水,Dijkstra过最长路
  • 板块P1807 最长路
  • 楼主expnoi
  • 当前回复43
  • 已保存回复43
  • 发布时间2022/10/20 16:01
  • 上次更新2023/10/27 06:47:22
查看原帖
数据过水,Dijkstra过最长路
378346
expnoi楼主2022/10/20 16:01

我们发现,只要按照点的编号大小成为关键字放入堆,即可通过。

请求加强数据。

dij代码:

#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;
}
2022/10/20 16:01
加载中...