P3371 最短路
作者:互联网
原题洛谷P3371
建边+dijstra找最短路
#include<bits/stdc++.h> using namespace std; struct E //边 { long long v; long long next; long long w; }ed[500001]; long long head[500001],acti; bool b[700000];//标记 long long d[700000];//权 long long n,m,s,mi=0x7ffffff; long long ans; long long v1,w1,u1; void ae(long long u,long long v,long long w) //建边 { acti++; ed[acti].v=v; ed[acti].w=w; ed[acti].next=head[u]; head[u]=acti; } int main() { fill(d,d+70000,2147483647);//初始化 cin>>n>>m>>s; for(long long i=1;i<=m;i++) { cin>>v1>>w1>>u1; ae(v1,w1,u1); } long long cur; cur=s; d[s]=0; while(b[cur]==0) { mi=2147483647; b[cur]=1; for(long long i=head[cur];i!=0;i=ed[i].next) { if(b[ed[i].v]==0 && d[ed[i].v]>d[cur]+ed[i].w)//松弛过程 { d[ed[i].v]=d[cur]+ed[i].w; } } for(long long i=1;i<=n;i++) { if(b[i]==0 && mi>d[i]) //取最小 { mi=d[i]; cur=i; } } } for(long long i=1;i<=n;i++) { cout<<d[i]<<' ';//输出 } return 0; }
标签:head,cur,ed,短路,long,acti,w1,P3371 来源: https://www.cnblogs.com/SoN3ri/p/16219189.html