POJ 2139 SIx Degrees of Cowvin Bacon 最短路 水題

                  Six Degrees of Cowvin Bacon

Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 3602   Accepted: 1675

Description

The cows have been making movies lately, so they are ready to play a variant of the famous game "Six Degrees of Kevin Bacon".

The game works like this: each cow is considered to be zero degrees of separation (degrees) away from herself. If two distinct cows have been in a movie together, each is considered to be one ‘degree‘ away from the other. If a two cows have never worked together but have both worked with a third cow, they are considered to be two ‘degrees‘ away from each other (counted as: one degree to the cow they‘ve worked with and one more to the other cow). This scales to the general case.

The N (2 <= N <= 300) cows are interested in figuring out which cow has the smallest average degree of separation from all the other cows. excluding herself of course. The cows have made M (1 <= M <= 10000) movies and it is guaranteed that some relationship path exists between every pair of cows.

Input

* Line 1: Two space-separated integers: N and M

* Lines 2..M+1: Each input line contains a set of two or more space-separated integers that describes the cows appearing in a single movie. The first integer is the number of cows participating in the described movie, (e.g., Mi); the subsequent Mi integers tell which cows were.

Output

* Line 1: A single integer that is 100 times the shortest mean degree of separation of any of the cows.

Sample Input

4 2
3 1 2 3
2 3 4

Sample Output

100

Hint

[Cow 3 has worked with all the other cows and thus has degrees of separation: 1, 1, and 1 -- a mean of 1.00 .]

Source

USACO 2003 March Orange

好吧,這道題題意我沒有看懂,最後是google了別人的題解的題意的。

題意:為了向一個理論“任何人可以通過最多5個人認識任何一個人”致敬,一群牛決定開拍電影,

有N頭牛,拍了M電影,每一部電影裡面有u個角色。

若2頭牛在同一部電影中出現,則他們就認識了,距離為1,若2部牛沒有在同一部電影裡面出現過,但是他們都認識第3頭牛,則他們的距離為2,一次類推。

要求:

找出一頭牛,他到其他所有牛的距離之和sum是最小的,輸出最小的平均距離,即sum/(N-1),

向下取整。

floyd就好啦。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4
 5 using namespace std;
 6
 7 const int INF=0x3f3f3f3f;
 8 const int MAXN=303;
 9
10 int dp[MAXN][MAXN];
11 int tmp[MAXN];
12
13 void init(int N)
14 {
15     for(int i=1;i<=N;i++)
16     {
17         for(int j=1;j<=N;j++)
18         {
19             if(i==j)
20                 dp[i][j]=0;
21             else
22                 dp[i][j]=INF;
23         }
24     }
25 }
26
27 void floyd(int N)
28 {
29     for(int k=1;k<=N;k++)
30         for(int i=1;i<=N;i++)
31             for(int j=1;j<=N;j++)
32                 dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);
33 }
34
35 void solve(int N)
36 {
37     int minc=INF;
38     for(int i=1;i<=N;i++)
39     {
40         int sum=0;
41         for(int j=1;j<=N;j++)
42             sum+=dp[i][j];
43         if(sum<minc)
44             minc=sum;
45     }
46     printf("%d\n",minc*100/(N-1));
47 }
48
49 int main()
50 {
51     int N,M;
52     while(~scanf("%d%d",&N,&M))
53     {
54         init(N);
55         for(int i=0;i<M;i++)
56         {
57             int u;
58             scanf("%d",&u);
59             for(int j=1;j<=u;j++)
60                 scanf("%d",&tmp[j]);
61             for(int j=1;j<=u;j++)
62             {
63                 for(int k=1;k<=u;k++)
64                 {
65                     if(j==k)
66                         continue;
67                     dp[tmp[j]][tmp[k]]=1;
68                 }
69             }
70         }
71         floyd(N);
72
73         solve(N);
74     }
75     return 0;
76 }

时间: 2024-12-18 09:39:04

POJ 2139 SIx Degrees of Cowvin Bacon 最短路 水題的相关文章

POJ 2139 Six Degrees of Cowvin Bacon

Six Degrees of Cowvin Bacon Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2986   Accepted: 1390 Description The cows have been making movies lately, so they are ready to play a variant of the famous game "Six Degrees of Kevin Bacon&quo

poj 2139 Six Degrees of Cowvin Bacon , floyd

点击打开链接 题意:给定牛的关系图,求其中一头牛与其他牛关系路程之和sum最小,然后输出 sum*100/(n-1) floyd求任意两点间的最短路程 注意: inf不能太大,因为 f[i][k] + f[k][j]  做加法时可能会溢出! #include <cstdio> #include <cstring> const int maxn = 300 + 5; const int inf = 1<<29; int n, m; int f[maxn][maxn]; i

任意两点间最短距离floyd-warshall ---- POJ 2139 Six Degrees of Cowvin Bacon

floyd-warshall算法 通过dp思想 求任意两点之间最短距离 重复利用数组实现方式dist[i][j] i - j的最短距离 for(int k = 1; k <= N; k++) for (int i = 1; i <= N; i++) for (int j = 1; j <= N; j++) dist[i][j] = min(dist[i][j], dist[i][k]+dist[k][j]); 非常好实现 O(V^3) 这里贴一道刚好用到的题 http://poj.org

最短路(构图) 之 poj 2139 Six Degrees of Cowvin Bacon

/* 解决此题,关键在于构图. 目标: The N (2 <= N <= 300) cows are interested in figuring out which cow has the smallest average  degree of separation from all the other cows. excluding herself of course. 即:求解过任意两点间的最短路后,sumMin = min{ sum{dp[1][1->n]}, sum{dp[2]

Six Degrees of Cowvin Bacon (poj 2139 最短路Floyd)

Language: Default Six Degrees of Cowvin Bacon Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3288   Accepted: 1529 Description The cows have been making movies lately, so they are ready to play a variant of the famous game "Six Degrees

POJ2139 Six Degrees of Cowvin Bacon 【Floyd】

Six Degrees of Cowvin Bacon Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3131   Accepted: 1455 Description The cows have been making movies lately, so they are ready to play a variant of the famous game "Six Degrees of Kevin Bacon&quo

POJ No 2139 Six Degress of Cowvin Bacon(warshall_floyd(任意两点最短路径))

题目: http://poj.org/problem?id=2139 题解:N只牛,在一组的两只牛,分别两只之间为 “1度”,自己到自己为0度,M组牛.求,N只牛之中,两只牛之间 平均最短度数*100.模板Floyd算法,求任意两点之间最短路径. #include <iostream> #include <algorithm> #include <iomanip> using namespace std; const int maxn = 300 + 24; const

【Floyd】POJ2139 -Six Degrees of Cowvin Bacon

普通的Floyd了分分秒可以水过,结果在submit前删调试段落的时候把程序本体给删了吃了两个WA…… 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 const int INF=3000000; 5 using namespace std; 6 const int MAXN=10000; 7 int len[MAXN][MAXN]; 8 int f[MAXN][MAXN]; 9 10 int

POJ2139 Six Degrees of Cowvin Bacon [Floyd]

水题,随手敲过 一看就是最短路问题,a,b演同一场电影则他们的距离为1 默认全部两两原始距离无穷,到自身为0 输入全部数据处理后floyd 然后照它说的求平均分离度 再找最小的,×100取整输出 #include <cstdio> #include <algorithm> #include <iostream> using namespace std; int cownum,filmnum; int film[11111][333]; int g[333][333];