标签:
问题描述
输入
输出
样例输入
3 2 2 4 3 5 2 1 2 3 6 2 1 2 2 2 5 3 4 4 2 8 5 3 1 5 8 4 1 6 4 10 2 7 5 2 0 2 2 5 1 5 0
样例输出
3 2 3 10
求某点连通全图所需的最小时间
确定这个点,并输出最小时间
用Floyd
1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 using namespace std; 5 const int inf=1<<29; 6 const int N=1100; 7 int u,v,m,n; 8 int w[N][N]; 9 int main() 10 { 11 while(scanf("%d",&n)!=EOF&&n) 12 { 13 for(int i=1; i<=n; i++) 14 { 15 for(int j=1; j<=n; j++) 16 { 17 w[i][j]=inf; 18 } 19 } 20 int tmp; 21 for(int i=1; i<=n; i++) 22 { 23 scanf("%d",&m); 24 for(int j=1; j<=m; j++) 25 { 26 scanf("%d%d",&v,&tmp);//要先定义一个变量存权值 27 w[i][v] = tmp;//再把权值付给w[i][v],否则会出错! 28 } 29 } 30 for(int k=1;k<=n;k++) 31 { 32 for(int i=1;i<=n;i++) 33 { 34 for(int j=1;j<=n;j++) 35 { 36 if(k!=i&&k!=j&&w[i][k]!=inf&&w[k][j]!=inf) 37 { 38 w[i][j]=min(w[i][j],w[i][k]+w[k][j]); 39 } 40 } 41 } 42 } 43 int ma,mi=inf,x; 44 for(int i=1;i<=n;i++) 45 { 46 ma=-inf; 47 for(int j=1;j<=n;j++) 48 { 49 if(j==i) 50 continue; 51 if(w[i][j]>ma)//找出每一行间的最大花费时间 52 { 53 ma=w[i][j]; 54 } 55 } 56 if(ma<mi) 57 { 58 mi=ma;//找出各行之间最小花费时间,即为最小值 59 x=i; 60 } 61 } 62 if(mi==inf)//存在断点,不能够接通 63 printf("disjoint\n"); 64 else 65 printf("%d %d\n",x,mi); 66 } 67 return 0; 68 }
POJ-1125-Stockbroker Grapevine
标签:
原文地址:http://www.cnblogs.com/tianmin123/p/4789824.html