题意:给定牛的关系图,求其中一头牛与其他牛关系路程之和最小,然后输出这数乘以一百在除以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 }