1 #include <bits/stdc++.h> 2 #define ll long long 3 static const int INFTY=2147483647; 4 const int maxm=500010; 5 using namespace std; 6 struct edge{ 7 int t,w,next; 8 }e[maxm*2]; 9 ll first[maxm*2],dis[maxm*2],ent; 10 bool vis[maxm*2]; 11 int n,m,s; 12 void add(int u,int v,int w) 13 { 14 e[++ent].t=v;e[ent].w=w;e[ent].next=first[u];first[u]=ent; 15 } 16 struct node{ 17 int dis,pos; 18 bool operator<(const node &x)const 19 { 20 return x.dis<dis; 21 } 22 }; 23 std::priority_queue<node> q; 24 void dij() 25 { 26 dis[s]=0;q.push((node){0,s}); 27 while(!q.empty()) 28 { 29 node tem=q.top();q.pop(); 30 int x=tem.pos; 31 if(vis[x])continue; 32 vis[x]=1; 33 for(int i=first[x];i;i=e[i].next) 34 { 35 int t=e[i].t; 36 if(dis[t]>dis[x]+e[i].w) 37 { 38 dis[t]=dis[x]+e[i].w; 39 if(!vis[t]) 40 q.push((node){dis[t],t}); 41 } 42 } 43 } 44 } 45 int main() 46 { 47 scanf( "%d%d%d", &n, &m, &s ); 48 for(int i = 1; i <= n; ++i) 49 dis[i] = INFTY; 50 for(int i = 0; i < m; ++i ) 51 { 52 int u, v, d; 53 scanf( "%d%d%d", &u, &v, &d ); 54 add( u, v, d ); 55 } 56 dij(); 57 for( int i = 1; i <= n; i++ ) 58 printf( "%d ", dis[i] ); 59 return 0; 60 }
1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 struct data{ 5 int from; 6 int to; 7 int w; 8 int next; 9 }a[500001]; 10 queue<int> q; 11 bool vis[10001]; 12 int first[10001]; 13 ll d[10001]; 14 int m,n,s,ent; 15 inline int read() 16 { 17 char ch; 18 int f=1,num=0; 19 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} 20 while(ch>='0'&&ch<='9'){num=num*10+ch-'0';ch=getchar();} 21 return f*num; 22 } 23 inline void add(int u,int v,int ww) 24 { 25 ent++; 26 a[ent].from=u; 27 a[ent].to=v; 28 a[ent].w=ww; 29 a[ent].next=first[u]; 30 first[u]=ent; 31 } 32 void spfa() 33 { 34 q.push(s); 35 d[s]=0; 36 vis[s]=1; 37 while(!q.empty()) 38 { 39 int h=q.front() ; 40 q.pop() ; 41 vis[h]=0; 42 for(int i=first[h];i;i=a[i].next ) 43 { 44 int tt=a[i].to; 45 if(d[h]+a[i].w<d[tt]) 46 { 47 d[tt]=d[h]+a[i].w; 48 if(!vis[tt]) 49 { 50 q.push(tt); 51 vis[tt]=true; 52 } 53 } 54 } 55 } 56 } 57 int main() 58 { 59 n=read();m=read();s=read(); 60 for(int i=1;i<=m;i++) 61 { 62 int u,v,p; 63 u=read();v=read();p=read(); 64 add(u,v,p); 65 } 66 for(int i=1;i<=n;i++) 67 d[i]=2147483647; 68 spfa(); 69 for(int i=1;i<=n;i++) 70 printf("%lld ",d[i]); 71 return 0; 72 }