Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
SPFA+邻接表1700+MS水过#include<cstdio> #include<algorithm> #include<cstring> #include<queue> using namespace std; const int MAXN=1000005, infi=1<<30; queue<int> q; int dist[MAXN]; struct aaa { int u, v, d, next; } a[MAXN], b[MAXN]; int head1[MAXN], head2[MAXN], tp1, tp2; void add1(int u,int v,int d) { a[tp1].u=u, a[tp1].v=v, a[tp1].d=d; a[tp1].next=head1[u]; head1[u]=tp1; tp1++; } void add2(int u,int v,int d) { b[tp2].u=u, b[tp2].v=v, b[tp2].d=d; b[tp2].next=head2[u]; head2[u]=tp2; tp2++; } int main() { int i, j, t1, n, m, u, v, d; scanf("%d",&t1); while(t1--) { scanf("%d%d",&n,&m); for(i=0;i<=m;i++) head1[i]=-1, head2[i]=-1; tp1=tp2=0; while(m--) { scanf("%d%d%d",&u,&v,&d); add1(u,v,d); add2(v,u,d); } for(i=1;i<=n;i++) dist[i]=infi; dist[1]=0; q.push(1); while(!q.empty()) { int st=q.front(); q.pop(); for(i=head1[st];i>=0;i=a[i].next) { if(dist[a[i].v]>dist[st]+a[i].d) { dist[a[i].v]=dist[st]+a[i].d; q.push(a[i].v); } } } long long solv=0; for(i=2;i<=n;i++) solv+=dist[i]; for(i=1;i<=n;i++) dist[i]=infi; dist[1]=0; q.push(1); while(!q.empty()) { int st=q.front(); q.pop(); for(i=head2[st];i>=0;i=b[i].next) { if(dist[b[i].v]>dist[st]+b[i].d) { dist[b[i].v]=dist[st]+b[i].d; q.push(b[i].v); } } } for(i=2;i<=n;i++) solv+=dist[i]; printf("%lld\n",solv); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator