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".

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

题意:牛跟自己的分离度是0,如果两牛合作分离度则为1,如果两牛同时和第三头牛合作分离度为2.求一头牛到其他牛最小的平均分离度,即求最短路。

思路:用floyd算法求最短路,注意最后结果的一个坑 要*100。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <stdlib.h>

using namespace std;

const int INF=1000000009;
int dis[605][605];
int a[605];
int n;

void floyd(){
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            for(int k=1;k<=n;k++){
                    dis[j][k]=min(dis[j][k],dis[j][i]+dis[i][k]);
            }
        }
    }
}

int main(){
    int m;
    scanf("%d%d",&n,&m);
    memset(dis,INF,sizeof(dis));
    for(int i=0;i<m;i++){
        int nn;
        scanf("%d",&nn);
        for(int j=0;j<nn;j++){
            scanf("%d",&a[j]);
        }
        for(int j=0;j<nn;j++){
            for(int k=0;k<j;k++){
                dis[a[j]][a[k]]=dis[a[k]][a[j]]=1;
            }
        }
    }
    floyd();
    int ans=INF;
    for(int i=1;i<=n;i++){
        int sum=0;
        for(int j=1;j<=n;j++){
            if(i!=j)
                sum+=dis[i][j];
        }
        ans=min(sum,ans);
    }
    printf("%d\n",int(ans*100/(n-1)));
    return 0;
}



POJ 2139 Six Degrees of Cowvin Bacon,布布扣,bubuko.com

时间: 2024-10-12 15:04:43

POJ 2139 Six Degrees of Cowvin Bacon的相关文章

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

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&quo

任意两点间最短距离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];