• POJ 2139 Six Degrees of Cowvin Bacon (floyd)


    Six Degrees of Cowvin Bacon

    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 6744   Accepted: 3139

    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

     
    题意稍微有点难理解,就是如果两头牛出现在同一个电影里(同一行),他们的分离度是1,如果不在一行,就要通过间接方式,比方说AB在同一场,BC在同一场,那么AC分离度就是2,以此类推,A和A分离度是0。求一头和其他牛分离度最低的牛,输出这n-1个和的平均数,然后把结果乘100。(最好是先乘100再除,免得各种转换数据类型,因为题目要求输出int类型)。
    思路就是floyd(因为最多300头牛)。
    //#include<bits/stdc++.h>
    #include<cstdio>
    #include<queue>
    #include<algorithm>
    #include<cstring>
    #include<string>
    #include<vector>
    #include<cmath>
    #include<iostream>
    using namespace std;
    #define maxn 305
    #define INF 99999999
    typedef pair<int,int> pii;
    vector<pii> e[maxn];
    int d[maxn],vis[maxn],mp[maxn][maxn];
    int n,m;
    void init()
    {
        for(int i=1; i<maxn; i++)
        {
            for(int j=1; j<maxn; j++)
            {
                if(i==j) mp[i][j]=0;
                else mp[i][j]=INF;
            }
        }
    }
    
    void floyd()
    {
        for(int k=1; k<=n; k++)
            for(int i=1; i<=n; i++)
                for(int j=1; j<=n; j++)
                    mp[i][j]=min(mp[i][j],mp[i][k]+mp[k][j]);
    }
    
    
    int main()
    {
        init();
        scanf("%d %d",&n,&m);
    
        while(m--)
        {
            int t,a[maxn];
            scanf("%d",&t);
            for(int i=0; i<t; i++)
                scanf("%d",&a[i]);
            for(int i=0; i<t; i++)
                for(int j=i+1; j<t; j++)
                {
                    mp[a[i]][a[j]]=mp[a[j]][a[i]]=1;
                }
        }
        floyd();
        int ans=INF;
        for(int i=1; i<=n; i++)
        {
            int sum=0;
            for(int j=1; j<=n; j++)
            {
                sum+=mp[i][j];
            }
            ans=min(sum,ans);
        }
        int ass=ans*100/(n-1);
        printf("%d
    ",ass);
        return 0;
    }
    View Code
  • 相关阅读:
    pat03-树1. 二分法求多项式单根(20)
    pat05-图1. List Components (25)
    pat06-图4. Saving James Bond
    pat05-图3. 六度空间 (30)
    pat05-图2. Saving James Bond
    pat04-树9. Path in a Heap (25)
    pat04-树8. Complete Binary Search Tree (30)
    pat04-树7. Search in a Binary Search Tree (25)
    pat04-树5. File Transfer (25)
    Two Sum
  • 原文地址:https://www.cnblogs.com/youchandaisuki/p/8826228.html
Copyright © 2020-2023  润新知