求调,玄关
查看原帖
求调,玄关
1063083
lysskzbszzhyqhhyflq楼主2024/7/30 14:15
#include<bits/stdc++.h>
using namespace std;
long long dis[100500],n,m,s,a,b,c;
bool diz[100500];
priority_queue<pair<long long,long long>,vector<pair<long long,long long> >,greater<pair<long long,long long > > >xx;
vector<pair<long long,long long> >r[100500];
int main(){
	scanf("%lld%lld%lld",&n,&m,&s);
	for(long long i=1;i<=m;i++){
		scanf("%lld%lld%lld",&a,&b,&c);
		r[a].push_back(make_pair(b,c));
	}
	for(long long i=1;i<=n;++i)
		dis[i]=2147483647;
	dis[s]=0;
	xx.push(make_pair(0,s));
	while(!xx.empty()){
        if(!diz[xx.top().second]){
        	diz[xx.top().second]=1;
        	for(long long i=0;i<r[xx.top().second].size();++i)
            	if(dis[r[xx.top().second][i].first]>dis[xx.top().second]+r[xx.top().second][i].second){
                	dis[r[xx.top().second][i].first]=dis[xx.top().second]+r[xx.top().second][i].second;
                	if(!diz[r[xx.top().second][i].first])
                   		xx.push(make_pair(dis[r[xx.top().second][i].first],r[xx.top().second][i].first));
            	}
		}
		xx.pop();
    }
	for(long long i=1;i<=n;++i)
		printf("%lld ",dis[i]);
    return 0;
}
2024/7/30 14:15
加载中...