POJ 2139

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

你可能感兴趣的:(poj)