0分求调
查看原帖
0分求调
1144893
Kenneth1楼主2024/9/22 19:01
#include <bits/stdc++.h>
using namespace std;
struct AI{
	long long zhi,zhong;
};
struct node{
	long long hao,zhi;
	friend bool operator<(const node a,const node b)
    {
        return a.zhi<b.zhi;
    }
};
long long n,m,w,d[200010];
priority_queue <node> q; 
vector <AI> a[200010];
bool f[200010];
int main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	cin>>n>>w>>m;
	for(long long i=1;i<=w;i++){
		long long r;
		cin>>r;
		long long o,x;
		cin>>o>>x;
		a[r].push_back({x,o});
	}
	memset(d,0x3f,sizeof(d));
	long long h;
	d[m]=0;
	q.push({m,d[m]});
	for(long long i=1;i<=n;i++){
		h=q.top().hao;
		q.pop();
		if(f[h]){
			continue;
		}
		f[h]=true;
		for(long long j=0;j<a[h].size();j++){
			if(a[h][j].zhi!=0&&d[a[h][j].zhong]>d[h]+a[h][j].zhi){
				d[a[h][j].zhong]=d[h]+a[h][j].zhi;
				if(!f[j]){
					q.push({a[h][j].zhong,d[a[h][j].zhong]});
				}
			}
		}
	}
	for(long long i=1;i<=n;i++){
		cout<<d[i]<<" "; 
	}
	return 0;
}
2024/9/22 19:01
加载中...