大佬求救,50分的Dijkstra
查看原帖
大佬求救,50分的Dijkstra
1382982
jikky楼主2024/7/10 16:50
#include<bits/stdc++.h>
using namespace std;

struct edge{
	long long nex;
	long long v,w;
}e[1000002];

long long head[1000002]={},cnt=1;
bool xu[1000002]={};
long long d[1000002];
void add(long long u,long long v,long long w){
	e[cnt].nex=head[u];
	head[u]=cnt;
	e[cnt].v=v;
	e[cnt].w=w;
	cnt++;
}

int main(){
	long long n,m,f;
	cin>>n>>m>>f;
	long long u,v,w;
	for(int i=1;i<=m;i++){
		scanf("%lld%lld%lld",&u,&v,&w);
		add(u,v,w);
	}
	for(int i=1;i<=n;i++){
		if(i==f){
			d[i]=0;
			xu[i]=1;
		}
		else{
			d[i]=214748364;
		}
	}
	int t=f;
	int mi=214748364,num=0;
	for(int i=1;i<=n;i++){
		for(int j=head[t];j;j=e[j].nex){
			if(!xu[e[j].v]){
				//cout<<d[t]+e[j].w<<endl;
				//d[e[j].v]=min(d[e[j].v],d[t]+e[j].w);
				if(d[e[j].v]>d[t]+e[j].w){
					d[e[j].v]=d[t]+e[j].w;
				}
				if(d[e[j].v]<mi){
					mi=d[e[j].v];
					num=e[j].v;
				}
			}
		}
		mi=214748364;
		t=num;
		xu[t]=1;
	}

	for(int i=1;i<=n;i++){
		printf("%d ",d[i]);
	}

	return 0;
}
2024/7/10 16:50
加载中...