题意:给定牛的关系图,求其中一头牛与其他牛关系路程之和最小,然后输出这数乘以一百在除以n-1,虽然貌似题目没说,但是是向下取整= =!

题解:flyod最短路,枚举找最小

View Code
 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 using namespace std;
 5 int d[400][400];
 6 int main()
 7 {
 8     int n,m;
 9     while(scanf("%d%d",&n,&m)!=EOF)
10     {
11         memset(d,-1,sizeof(d));
12         for(int i=0;i<m;i++)
13         {
14             int num,a[305];
15             scanf("%d",&num);
16             for(int j=0;j<num;j++)
17             {
18                 scanf("%d",&a[j]);
19                 for(int k=0;k<j;k++)
20                     d[a[j]][a[k]]=d[a[k]][a[j]]=1;
21             }
22         }
23         for(int k=1;k<=n;k++)
24         {
25             for(int i=1;i<=n;i++)
26             {
27                 if(d[i][k]!=-1)
28                 {
29                     for(int j=1;j<=n;j++)
30                     {
31                         if(d[k][j]!=-1&&(d[i][j]==-1||d[i][j]>d[i][k]+d[k][j]))
32                             d[i][j]=d[i][k]+d[k][j];
33                     }
34                 }
35             }
36         }
37         int ans=1<<30;
38         for(int i=1,tp;i<=n;i++)
39         {
40             d[i][i]=0;tp=0;
41             for(int j=1;j<=n;j++)
42                 tp+=d[i][j];
43             ans=min(ans,tp);
44         }
45         printf("%d\n",ans*100/(n-1));
46     }
47     return 0;
48 }