POJ 2139 Six Degrees of Cowvin Bacon
水题,Floyd。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int dis[500][500]; int f[500]; int n,m; int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(i==j) dis[i][j]=0; else dis[i][j]=0x7fffffff; } } for(int i=1;i<=m;i++) { int x; scanf("%d",&x); for(int j=1;j<=x;j++) scanf("%d",&f[j]); for(int j=1;j<=x;j++) for(int k=j+1;k<=x;k++) dis[f[j]][f[k]]=dis[f[k]][f[j]]=1; } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(dis[i][k]!=0x7fffffff&&dis[k][j]!=0x7fffffff&&dis[i][j]>dis[i][k]+dis[k][j] ) dis[i][j]=dis[i][k]+dis[k][j]; int ans=0x7fffffff; for(int i=1;i<=n;i++) { int sum=0; for(int j=1;j<=n;j++) sum=sum+dis[i][j]; ans=min(ans,sum); } printf("%d\n",ans*100/(n-1)); return 0; }