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 }

 

你可能感兴趣的:(poj)