60分dijk求调
查看原帖
60分dijk求调
230965
MalphaX楼主2022/8/9 23:34

RT

#include <bits/stdc++.h>
using namespace std;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;
int dis[30001],vis[30001],a,f[1000001],b,total,c,d,i,n,j,k;
int to[10001],val[10001],nex[10001];
struct w{
	int to,val,nex;
}g[100001];
void add(int x,int y,int z){
	g[++total].to=y;
	g[total].val=z;
	g[total].nex=f[x];
	f[x]=total;
}
int main(){
	int p;
    cin>>a>>n>>p;
    for(i=1;i<=n;++i){
    	cin>>b>>c>>d;
    	add(b,c,d);
	}
	memset(dis,1<<31-1,sizeof(dis));
	dis[p]=0;
	q.push(make_pair(0,p));
	while(q.size()){
		k=q.top().second,q.pop();
		if(vis[k])continue;
		vis[k]=1;
		for(i=f[k];i;i=g[i].nex){
			if(dis[g[i].to]>dis[k]+g[i].val)
			dis[g[i].to]=dis[k]+g[i].val,
			q.push(make_pair(dis[g[i].to],g[i].to));
			}
		}
	for(i=1;i<=a;++i)
	cout<<dis[i]<<" ";
	return 0;
}
2022/8/9 23:34
加载中...