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 |
哈哈,0ms,菜鸟也有好运哪!!#include<iostream> #include<stdio.h> #include<cstring> //using namespace std; #define info 1<<29 int f[1234]; int find(int x) { while(x!=f[x]) x=f[x]; return x; } int Union(int x,int y) { int xx=find(x); int yy=find(y); if(xx!=yy) f[xx]=yy; return 1; } int main() { int dis[102][102],i,n,j,k,N,max,min,p,t,a[12345]; while(scanf("%d",&n)!=EOF) { memset(a,0,sizeof(a)); // memset(f,0,sizeof(f)); if(n==0) break; for(i=1;i<=n;i++) f[i]=i; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(i==j) dis[i][j]=0; else dis[i][j]=info; } } for(i=1;i<=n;i++) { scanf("%d",&N); for(j=1;j<=N;j++) { scanf("%d%d",&p,&t); Union(i,p); if(dis[i][p]>t) dis[i][p]=t; } } for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) { if(dis[i][j]>dis[i][k]+dis[k][j]) dis[i][j]=dis[i][k]+dis[k][j]; } for(k=1;k<=n;k++) { max=0; for(j=1;j<=n;j++) if(dis[k][j]>max) { max=dis[k][j]; a[k]=max; } } min=info; int ff; for(k=1;k<=n;k++) { if(a[k]<min) {min=a[k]; ff=k;} } int flag=0; for(i=1;i<=n;i++) if(find(1)!=find(i)) flag=1; if(flag==1) { printf("disjoint\n");//<<endl; continue; } printf("%d %d\n",ff,min); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator