码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-06-27 01:15:20      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:

                  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

 
 
好吧,這道題題意我沒有看懂,最後是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 }
View Code

 

 

 

 

 

 
 
 
 
 
 
 
 
 
 
 

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

标签:

原文地址:http://www.cnblogs.com/-maybe/p/4603474.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!