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 |
老runtime 哪位大侠帮我看看啊!!!!!谢过!!#include <stdio.h> #include <stdlib.h> #include <string.h> int net[200][200],path[200]; struct way { int v1,v2,dis; }; int cmp(const void* way1,const void* way2) { way*p1,*p2; p1=(way*)way1; p2=(way*)way2; return p1->dis-p2->dis; } int getRoot(int a) { while(path[a]>=0) a=path[a]; return a; } int main() { int p,r,i,j,length; int a,b,tmp; way villway[20000]; while(1) { memset(path,-1,sizeof(path)); memset(net,0,sizeof(net)); length=0; scanf("%d",&p); if(p==0)break; scanf("%d",&r); int k=0; for(i=0;i<r;i++) { scanf("%d%d",&a,&b); scanf("%d",&tmp); a--;b--; if((net[a][b]==0&&net[b][a]==0)||(tmp<net[a][b]||tmp<net[b][a])) { net[a][b]=tmp;net[b][a]=0; } } for(i=0;i<r;i++) for(j=0;j<r;j++) if(net[i][j]>0) { villway[k].v1=i,villway[k].v2=j,villway[k].dis=net[i][j]; k++; } if(k>0) qsort(villway,k,sizeof(villway[0]),cmp); for(i=0;i<k;i++) { int root1=getRoot(villway[i].v1); int root2=getRoot(villway[i].v2); if(path[root1]+p==0||path[root2]+p==0) break; if(root1!=root2) { if(path[root1]<path[root2]) { path[root1]+=path[root2]; path[root2]=root1; } else { path[root2]+=path[root1]; path[root1]=root2; } length+=villway[i].dis; } } printf("%d\n",length); } return 0; } 哪位大侠帮我看看啊!!!!!谢过!! Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator