poj 1125 Stockbroker Grapevine(Folyd)

 1 //nyoj的数据改成了1000 ,然后就跪了。。 好像大神们用spfa做的

 2 #include<iostream>

 3 #include<cstdio>

 4 #include<cstdlib>

 5 #include<cstring>

 6 #include<string>

 7 #include<queue>

 8 #include<algorithm>

 9 #include<map>

10 #include<iomanip>

11 #include<climits>

12 #include<string.h>

13 #include<cmath>

14 #include<stdlib.h>

15 #include<vector>

16 #include<stack>

17 #include<set>

18 #define INF 2000000000

19 #define MAXN 110

20 #define maxn 1000010

21 #define Mod 1000007

22 #define N 1010

23 using namespace std;

24 typedef long long LL;

25 

26 int n, m;

27 int v, w;

28 int G[MAXN][MAXN];

29 int minn, pos;

30 

31 void Floyd()

32 {

33     for (int k = 1; k <= n; ++k)

34         for (int i = 1; i <= n; ++i)

35             for (int j = 1; j <= n; ++j)

36                 if (G[i][k] + G[k][j] < G[i][j])

37                     G[i][j] = G[i][k] + G[k][j];

38 }

39 

40 void getMin()

41 {

42     int sum;

43     minn = maxn;

44     pos = 0;

45     for (int i = 1; i <= n; ++i) {

46         sum = 0;

47         for (int j = 1; j <= n; ++j)

48             if (i!= j && G[i][j] > sum)

49                 sum = G[i][j];

50         if (minn > sum) {

51             minn = sum;

52             pos = i;

53         }

54     }

55     

56 }

57 

58 int main()

59 {

60     while (~scanf("%d", &n),n) {

61         for (int i = 0; i <= n; ++i)

62             for (int j = i + 1; j <= n; ++j)

63                 G[i][j] = G[j][i] = maxn;

64         

65         for (int i = 1; i <= n; ++i) {

66             scanf("%d", &m);

67             for (int j = 0; j < m; ++j) {

68                 scanf("%d%d", &v, &w);

69                 G[i][v] = w;

70             }

71         }

72         Floyd();

73         getMin();

74         if (minn == maxn) puts("disjoint");

75         else printf("%d %d\n",pos,minn);

76     }

77     return 0;

78 }
代码君

 

你可能感兴趣的:(broker)