您的位置:首页 > 其它

POJ 2139 Six Degrees of Cowvin Bacon(任意两点最短路,Floyd)

2014-04-06 17:38 417 查看
题目:http://poj.org/problem?id=2139

题意:奶牛们最近要拍电影了(ACM真是各种奶牛。。。)

1、若两个的奶牛一起工作则,他们相互的度(degrees)为1;

2、若两只奶牛a、b不一起工作,但与另有一只奶牛都和他们工作,则a、b的相互的度为2。

求奶牛的与其他奶牛的度的平均值的一百倍的整数。

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

const int maxn = 310,maxm = 10010,INF = 0x3f3f3f3f;
int d[maxn][maxn],t[maxm];
int N, M;

void floyd()
{
for(int k = 1; k <= N; k++)
for(int i = 1; i <= N; i++)
for(int j = 1; j <= N; j++)
d[i][j] = min(d[i][j], d[i][k]+d[k][j]);
}
int main()
{
while(scanf("%d%d", &N, &M) != EOF)
{
memset(d, 0x3f, sizeof(d));
int n;
for(int j = 0; j < M; j++)
{
scanf("%d", &n);
for(int i = 0; i < n; i++)
scanf("%d", &t[i]);
for(int i = 0; i < n; i++)
for(int j = i+1; j < n; j++)
{
d[t[i]][t[j]] = 1;
d[t[j]][t[i]] = 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 += d[i][j];
ans = min(ans, sum);
}
printf("%d\n", ans*100/(N-1));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: