POJ-2139 Six Degrees of Cowvin Bacon---Floyd

题目链接:

https://vjudge.net/problem/POJ-2139

题目大意:

给定一些牛的关系,他们之间的距离为1。

然后求当前这只牛到每只牛的最短路的和,除以 n - 1只牛的最大值。(这里直接取整就行啦)

思路:

floyd来求最短路。

然后枚举求max就行了。

 1 #include<iostream>
 2 #include<vector>
 3 #include<queue>
 4 #include<algorithm>
 5 #include<cstring>
 6 #include<cstdio>
 7 #include<set>
 8 #include<map>
 9 #include<cmath>
10 using namespace std;
11 typedef pair<int, int> Pair;
12 typedef long long ll;
13 const int INF = 0x3f3f3f3f;
14 int T, n, m;
15 const int maxn = 2e4 + 10;
16 int Map[305][305];
17 int x[305];
18 ll sum[305];
19 void floyd()
20 {
21     for(int k = 1; k <= n; k++)
22     {
23         for(int i = 1; i <= n; i++)
24         {
25             for(int j = 1; j <= n; j++)
26             {
27                 Map[i][j] = min(Map[i][j], Map[i][k] + Map[k][j]);
28             }
29         }
30     }
31     ll sum, minn = INF;
32     for(int i = 1; i <= n; i++)
33     {
34         sum = 0;
35         for(int j = 1; j <= n; j++)
36             sum += (ll)Map[i][j];
37         minn = min(minn, sum);
38     }
39     int ans = minn * 100 / (n - 1);
40     cout<<ans<<endl;
41 }
42 int main()
43 {
44     cin >> n >> m;
45     memset(Map, INF, sizeof(Map));
46     for(int i = 1; i <= n; i++)Map[i][i] = 0;
47     while(m--)
48     {
49         int t;
50         cin >> t;
51         for(int i = 0; i < t; i++)cin >> x[i];
52         for(int i = 0; i < t; i++)
53             for(int j = i + 1; j < t; j++)
54             Map[x[i]][x[j]] = Map[x[j]][x[i]] = 1;
55 
56     }
57     floyd();
58 }
原文地址:https://www.cnblogs.com/fzl194/p/8819293.html