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 |
to admin管理员同志: 你好! 下面是1511 ac的代码,但是却过不去我自己的数据,请问是否要加数据? 我的数据: 1 4 8 1 2 1 2 1 4 4 1 3 2 4 7 2 3 2 3 2 2 3 4 4 1 3 5 正确答案是24 我的代码25 #include <stdio.h> #include <stdlib.h> int const MX=int(1e9),L=1000001; struct point { int t,l,last; } edge[2][L]; bool flag[2][L]; int n,e; __int64 ans; int q[L],d[L],head[2][L]; void spfa(int num) { int open,closed,i,k; open=closed=1; q[1]=1; for (i=1;i<=n;i++) d[i]=MX; d[1]=0; while (1) { k=head[num][q[open]]; while (k!=-1) { if (d[edge[num][k].t]>d[q[open]]+edge[num][k].l) { d[edge[num][k].t]=d[q[open]]+edge[num][k].l; if (!flag[num][edge[num][k].t]) { flag[num][edge[num][k].t]=1; q[++closed]=edge[num][k].t; } } k=edge[num][k].last; } open++; if (open>closed) break; } for (i=1;i<=n;i++) ans+=d[i]; } void begin() { int i,j; for (i=1;i<=n;i++) for (j=0;j<=1;j++) { head[j][i]=-1; flag[j][i]=0; } } int main() { int cases,i,g,f,t,l; scanf("%d",&cases); for (g=1;g<=cases;g++) { scanf("%d %d",&n,&e); begin(); for (i=1;i<=e;i++) { scanf("%d %d %d",&f,&t,&l); edge[0][i].last=head[0][f]; edge[0][i].t=t; edge[0][i].l=l; head[0][f]=i; edge[1][i].last=head[1][t]; edge[1][i].t=f; edge[1][i].l=l; head[1][t]=i; } ans=0; spfa(0); spfa(1); printf("%I64d\n",ans); } //system("pause"); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator