P3371 最短路
原题洛谷P3371
建边+Dijkstra找最短路
#includeusing 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< ' ';//输出 } return 0; }