3WA3RE,大红大紫,求调
查看原帖
3WA3RE,大红大紫,求调
551630
Lemon_zqp楼主2024/10/12 13:59
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int inf = 2147483647;

int n, m, s, cnt, head[200005], to[200005], val[200005], nxt[200005], dis[200005];
bool vis[200005];

struct node{
	int v, w;
	friend bool operator <(node a, node b){
		return a.w > b.w;
	}
} tmp;
priority_queue<node> q; 

void add(int u, int v, int w){
	to[++cnt] = v;
	val[cnt] = w;
	nxt[cnt] = head[u];
	head[u] = cnt;
}

void dijkstra(){
	for(int i = 1; i <= n; i++){
		dis[i] = inf;
	}
	dis[s] = 0;
	tmp.v = s;
	tmp.w = 0;
	q.push(tmp);
	while(!q.empty()){
		int u = q.top().v;
		q.pop();
		if(vis[u]) continue;
		vis[u] = true;
		for(int i = head[u]; i; i = nxt[i]){
			if(dis[to[i]] > (long long)dis[u] + val[i]){
				dis[to[i]] = dis[u] + val[i];
				tmp.v = dis[to[i]];
				tmp.w = to[i];
				q.push(tmp);
			}
		} 
	}
}


signed main(){
	cin >> n >> m >> s;
	for(int i = 1; i <= m; i++){
		int a, b, c;
		cin >> a >> b >> c;
		add(a, b, c);
	}
	dijkstra();
	for(int i = 1; i <= n; i++){
		cout << dis[i] << " ";
	}
	return 0;
} 
2024/10/12 13:59
加载中...