您的位置:首页 > 其它

POJ 2139

2015-10-28 09:35 155 查看
POJ 2139

题目大意:

奶牛拍电影,一个电影里参演的奶牛距离为1,若A,B一起,B,C一起,认为A,C距离为2,奶牛们都会联系起来,求所有奶牛里最短的平均路程,*100.

#include<iostream>
#include <iomanip>
#include<algorithm>
#include<cstdio>
using namespace std;
const int MAX_V=300+16;
int d[MAX_V][MAX_V];
int V;
int x[MAX_V];
//  求任意两点间距离的最小值
void warshall_floyd()
{
for(int k=0;k<V;k++)
{
for(int i=0;i<V;i++)
{
for(int j=0;j<V;j++)
{
d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
}
}
}
}

int main()
{
int M;
cin>>V>>M;
memset(d, 0x3f3f3f, sizeof(d));
//warshall_floyd()要注意d[i][i]为0
for(int i=0;i<V;i++)
{
d[i][i]=0;
}
while(M--)
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>x[i];
--x[i];
}
//一部电影里的奶牛距离为1
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
d[x[i]][x[j]]=1;
d[x[j]][x[i]]=1;
}
}
}
warshall_floyd();
int ans=99999999;
for(int i=0;i<V;i++)
{
int sum=0;
//求每个奶牛的最短路径
for(int j=0;j<V;j++)
{
sum+=d[i][j];
}
ans=min(ans,sum);
}
printf("%d\n",ans*100/(V-1));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: