$huaji^{233……}$
模板:
洛谷 P3371
#include<iostream> #include<algorithm> #include<cstdio> #include<cstdlib> #include<queue> using namespace std; struct data{ int v;int next; int value; }edge[500010]; int cnt; int alist[10010]; void add(int u,int v,int value) { edge[++cnt].v=v; edge[cnt].value=value; edge[cnt].next=alist[u]; alist[u]=cnt; return ; } queue<int> q; bool ins[10010]; int d[10010]; void spfa(int x) { d[x]=0; q.push(x); ins[x]=true; while(!q.empty()) { int now=q.front(); q.pop();ins[now]=false; int next=alist[now]; while(next) { int v=edge[next].v; int value=edge[next].value; if(d[v]>d[now]+value) { d[v]=d[now]+value; if(!ins[v]) { q.push(v); ins[v]=true; } } next=edge[next].next; } } return ; } int m,n,s; int main() { scanf("%d%d%d",&m,&n,&s); for(int i=1;i<=n;i++) { int u,v,value; scanf("%d%d%d",&u,&v,&value); add(u,v,value); } for(int i=0;i<=m;i++) { d[i]=2147483647;//此处有坑233...确切的来说是第三个点有坑 } spfa(s); for(int i=1;i<=m;i++) { printf("%d ",d[i]); } return 0; }