Dijkstra算法爆0!!!求调!!!
查看原帖
Dijkstra算法爆0!!!求调!!!
994681
arcticfox_LQX楼主2024/7/29 10:44
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std;
typedef long long ll;

const int N = 5e5+9;
int n, m, s;
 
struct edge{
	int v;
	ll w;
	int nxt;
}e[N];

int head[N], cnt = -1;

inline void add(int u, int v, int  w){
	e[++cnt] = (edge) {v, w, head[u]};
	head[u] = cnt;
} 

ll dit[N];
int vis[N];

priority_queue<pair<ll, int>, vector<pair<ll, int> >, greater<pair<ll, int> > > q; 

int main() {
	cin>>n>>m>>s;
	memset(head, -1, sizeof(head));
	for (int i = 1; i <= m; ++i) {
		ll u,v,w;
		cin>>u>>v>>w;
		add(u,v,w);
	}
	for (int i = 1; i <= n; ++i) dit[i] = (1 << 31LL) - 1; 
	dit[s] = 0; 
	q.push({0, s});
	while (!q.empty()) {
		int u = q.top().second; q.pop();
		if (vis[u]) continue;
		vis[u] = 1;
		for (int i = head[u]; i !=  -1; i = e[i].nxt) {
			int v = e[i].v;
			if (dit[v] > dit[u] + e[i].w) {
				dit[v] = dit[u] + e[i].w;			
				if (!vis[u]) q.push({dit[v], v});
			}
		}
	} 
	for (int i = 1; i <= n; ++i ){
		printf("%lld ",dit[i]);
	}
	return 0;
}
2024/7/29 10:44
加载中...