zrq495
www.zrq495.com

题意表示看不懂,英语太差。。。  看了别人的题意,大意是在一群人中散布传言,要求时间最短。

先输入消息传递的人数n, 接下来n行, 每行第一个数m,然后m组关系(编号和时间)。

flody 算法。

代码如下:

 1 #include<iostream>
 2 #include<cstring>
 3 #define MAX 9999999
 4 
 5 using namespace std;
 6 
 7 int map[102][102];
 8 
 9 void floyd(int n)
10 {
11     int i, j, k;
12     for (k=1; k<=n; k++)
13         for (i=1; i<=n; i++)
14             for (j=1; j<=n; j++)
15                 if (map[i][j] > map[i][k]+map[k][j])
16                     map[i][j]=map[i][k]+map[k][j];
17 }
18 
19 int main()
20 {
21     int n, m, i, j;
22     int time, no;
23     while(cin >> n, n)
24     {
25         for (i=1; i<=n; i++)
26             for (j=1; j<=n; j++)
27                 if (i != j) map[i][j]=MAX;
28                 else map[i][j]=0;
29         for (i=1; i<=n; i++)
30         {
31             cin >> m;
32             while(m--)
33             {
34                 cin >> no >> time;
35                 map[i][no]=time;
36             }
37         }
38         floyd(n);
39         int t=MAX;
40         int pos;
41         int max;
42         for (i=1; i<=n; i++)
43         {
44             max=0;
45             for (j=1; j<=n; j++)
46             {
47                 if (map[i][j] > max)
48                 {
49                     max=map[i][j];
50                 }
51             }
52             if (max < t)
53             {
54                 t=max;
55                 pos=i;
56             }
57         }
58         if (t < MAX)
59             cout << pos << " " << t << endl;
60         else
61             cout << "disjoint" << endl;
62     }
63     return 0;
64 }
posted on 2012-08-07 19:00  zrq495  阅读(132)  评论(0编辑  收藏  举报