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

 
 
好吧,這道題題意我沒有看懂,最後是google了別人的題解的題意的。
 
題意:為了向一個理論“任何人可以通過最多5個人認識任何一個人”致敬,一群牛決定開拍電影,
有N頭牛,拍了M電影,每一部電影裡面有u個角色。
若2頭牛在同一部電影中出現,則他們就認識了,距離為1,若2部牛沒有在同一部電影裡面出現過,但是他們都認識第3頭牛,則他們的距離為2,一次類推。
 
要求:
找出一頭牛,他到其他所有牛的距離之和sum是最小的,輸出最小的平均距離,即sum/(N-1),
向下取整。
 
floyd就好啦。
 
 
 
POJ 2139 SIx Degrees of Cowvin Bacon 最短路 水題
 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)