Very naked a Dijk algorithm problem, because the vertex number is too many can not be represented by the adjacency matrix, so the critical table is used to represent
AC Code
#include <stdio.h>#include<string.h>#include<queue>#include<vector>#include<iostream>#include<algorithm>using namespacestd;using namespacestd;Const intmaxn=2*50000;#defineINF 99999999structnode{intv; intu; intW; intNext;} V[MAXN];intHEAD[MAXN];intD[MAXN];intn,m,s,t;intTol;intDone[maxn];typedef pair<int,int>PII; priority_queue<pii,vector<pii>,greater<pii> >Q;voidinit () {tol=0; memset (Head,-1,sizeof(head));}voidDijk () {memset (done,0,sizeof(done)); for(intI=0; i<=n;i++) D[i]=inf; D[s]=0; Q.push (Make_pair (d[s],s)); while(!Q.empty ()) {PII u=Q.top (); Q.pop (); intx=U.second; if(Done[x])Continue; DONE[X]=1; for(inte=head[x];e!=-1; e=V[e].next) { intv=v[e].v; intw=V[E].W; if(d[x]+w<D[v]) {D[v]=d[x]+W; Q.push (Make_pair (d[v],v)); } } } if(d[t]==inf) printf ("unreachable\n"); Elseprintf ("%d\n", D[t]);}intMain () {intT; inttmp=0; scanf ("%d",&T); while(t--) {scanf ("%d %d%d%d",&n,&m,&s,&t); Init (); M*=2; intu,v,w; for(intI=0; i<m;i+=2) {scanf (" %d%d%d",&u,&v,&V); V[I].U=T; V[I].V=v; V[I].W=W; V[i].next=Head[u]; Head[u]=i; V[i+1].u=v; V[i+1].v=u; V[i+1].next=Head[v]; V[i+1].w=W; HEAD[V]=i+1; } printf ("Case #%d:",++tmp); Dijk (); } return 0; }
Uva (10986)