题意:奶牛拍电影,如果2个奶牛在同一场电影里演出,她们的合作度是1,如果ab合作,bc合作,ac的合作度为2,问哪一头牛到其他牛的合作度平均值最小再乘100
思路:floyd模板题
#include<cstdio> #include<cmath> #include<cstring> #include<iostream> #include<algorithm> int f[705][705],a[705]; int read(){ char ch=getchar();int f=1,t=0; while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();} while ('0'<=ch&&ch<='9'){t=t*10+ch-'0';ch=getchar();} return t*f; } int main(){ int n,m; n=read();m=read();
memset(f,0x3f3f3f3f,sizeof f);for (int i=1;i<=m;i++){ int cnt=read(); for (int j=1;j<=cnt;j++) a[j]=read(); for (int j=1;j<=cnt;j++) for (int k=1;k<j;k++) f[a[j]][a[k]]=f[a[k]][a[j]]=1; } for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) for (int k=1;k<=n;k++) f[j][k]=std::min(f[j][i]+f[i][k],f[j][k]); int mn=0x7fffffff; for (int i=1;i<=n;i++){ int s=0; for (int j=1;j<=n;j++) if (i!=j) s+=f[i][j]; if (s<mn) mn=s; } mn*=100; mn/=(n-1); printf("%d ",mn); }