POJ1511 SPFA水题

来源:互联网 发布:淘宝网1岁以上儿童玩具 编辑:程序博客网 时间:2024/05/22 11:44
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>#include<algorithm>#define For(i,j,k) for (i=j;i<=k;i++)using namespace std;const int dmax=1001000,INF=1000000000;int begin[dmax],next[dmax],to[dmax],w[dmax];int begin1[dmax],next1[dmax],to1[dmax],w1[dmax];int q[dmax*10],d[dmax];bool p[dmax];int e,e1,m,n;void add(int x,int y,int z){to[++e]=y;w[e]=z;next[e]=begin[x];begin[x]=e;}void add1(int x,int y,int z){to1[++e1]=y;w1[e1]=z;next1[e1]=begin1[x];begin1[x]=e1;}int reload(){int x,y,z,i,j,k;For(i,1,m)begin[i]=begin1[i]=0;For(i,1,m){scanf("%d%d%d",&x,&y,&z);add(x,y,z);add1(y,x,z);}}int main(){int i,j,k,f,l,T;long long ans;scanf("%d",&T);while (T--){scanf("%d%d",&n,&m);reload();For(i,1,n){d[i]=INF;p[i]=0;}ans=0;q[1]=1,p[1]=1,d[1]=0;f=0,l=1;while (f<l){k=q[++f],p[k]=0;for (i=begin[k];i>0;i=next[i])if (d[to[i]]>d[k]+w[i]){d[to[i]]=d[k]+w[i];if (!p[to[i]]){q[++l]=to[i];p[to[i]]=1;}}}For(i,2,n)ans+=d[i];For(i,1,n){d[i]=INF;p[i]=0;}q[1]=1,p[1]=1,d[1]=0;f=0,l=1;while (f<l){k=q[++f],p[k]=0;for (i=begin1[k];i>0;i=next1[i])if (d[to1[i]]>d[k]+w1[i]){d[to1[i]]=d[k]+w1[i];if (!p[to1[i]]){q[++l]=to1[i];p[to1[i]]=1;}}}For(i,2,n)ans+=d[i];printf("%I64d\n",ans);}return 0;}

0 2
原创粉丝点击