POJ 2139 Six Degrees of Cowvin Bacon

水题,Floyd。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int dis[500][500];
int f[500];
int n,m;

int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++) 
    {
        for(int j=1;j<=n;j++)
        {
            if(i==j) dis[i][j]=0;
            else dis[i][j]=0x7fffffff;
        }
    }
    for(int i=1;i<=m;i++)
    {
        int x; scanf("%d",&x);
        for(int j=1;j<=x;j++) scanf("%d",&f[j]);
        for(int j=1;j<=x;j++)
            for(int k=j+1;k<=x;k++)
                dis[f[j]][f[k]]=dis[f[k]][f[j]]=1;
    }

    for(int k=1;k<=n;k++)   
        for(int i=1;i<=n;i++)   
            for(int j=1;j<=n;j++)   
                if(dis[i][k]!=0x7fffffff&&dis[k][j]!=0x7fffffff&&dis[i][j]>dis[i][k]+dis[k][j] )   
                    dis[i][j]=dis[i][k]+dis[k][j];
    int ans=0x7fffffff;
    for(int i=1;i<=n;i++)
    {
        int sum=0;
        for(int j=1;j<=n;j++) sum=sum+dis[i][j];
        ans=min(ans,sum);
    }
    printf("%d\n",ans*100/(n-1));
    return 0;
}

 

posted @ 2016-04-06 09:15  Fighting_Heart  阅读(117)  评论(0编辑  收藏  举报