poj 1125

题意:股票经纪人要在人群中传播谣言,给出有联系的两个人及谣言在他们之间传播的时间,让你求出谣言从某个人开始传播至所有人所需的最短时间,以及这个人是第几个人

folyd算法

java代码

 1 import java.util.Scanner;
 2 import java.util.Arrays;
 3 
 4 public class Main{
 5     static int INF = 0x3f3f3f3f;
 6     
 7     public static void main(String[] args){
 8         int T;
 9         Scanner in = new Scanner(System.in);
10         while(in.hasNext()){
11             T = in.nextInt();
12             if(T==0)
13                 break;
14             int map[][] = new int[T+1][T+1];
15 
16             for(int i=0;i<=T;i++)
17                 Arrays.fill(map[i],INF);
18             
19             for(int i=1;i<=T;i++){
20                 int m=in.nextInt();
21                 for(int j=1;j<=m;j++){
22                     int u=in.nextInt();
23                     int w = in.nextInt();
24                     map[i][u] = w;
25                 }
26             }
27             
28             for(int k=1;k<=T;k++)
29                 for(int i=1;i<=T;i++)
30                     for(int j=1;j<=T;j++)
31                         if(k!=i&&i!=j&&map[i][k]+map[k][j]<map[i][j])
32                             map[i][j] = map[i][k]+map[k][j];
33             
34             int min = INF;
35             int s=0;
36             for(int i=1;i<=T;i++){
37                 int max = 0;
38                 for(int j=1;j<=T;j++){
39                     if(i!=j&&map[i][j]>max)
40                         max = map[i][j];
41                 }
42                 if(min>max){
43                     min = max;
44                     s = i;
45                 }
46             }
47             if(min>=INF)
48                 System.out.println("disjoint");
49             else
50                 System.out.println(s+" "+min);
51         }
52     }
53 }

 

posted @ 2015-05-17 16:31  杨永华  阅读(160)  评论(0编辑  收藏  举报