A

来源:互联网 发布:梦想 知乎 编辑:程序博客网 时间:2024/06/03 09:26
实在是坑在输出这里wa了好几发
注意是输出是整数整数整数的形式我至今不明为何

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 23 1 2 32 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 .]


#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int inf=0x3f3f3f3f;int n,m;int cow[305][305];int digit[10005];int main(){while(scanf("%d%d",&n,&m)!=EOF){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++)cow[i][j]=inf;cow[i][i]=0;}//奶牛们的初始化 for(int k=1;k<=m;k++){int t;scanf("%d",&t);for(int i=1;i<=t;i++)scanf("%d",&digit[i]);for(int i=1;i<=t;i++){for(int j=1;j<=t;j++){if(digit[i]==digit[j]||i==j)continue;else cow[digit[i]][digit[j]]=1;}} for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(cow[i][k]+cow[k][j]<cow[i][j])cow[i][j]=cow[i][k]+cow[k][j];} }}int maxn=inf;int u;for(int i=1;i<=n;i++){int ans=0;for(int j=1;j<=n;j++){if(cow[i][j]==inf||cow[i][j]==0)continue;else {ans+=cow[i][j];}}maxn=min(maxn,ans);}int  gg=100*maxn/(n-1);printf("%d\n",gg);}return 0;}