POJ 2139: Six Degrees of Cowvin Bacon
概要
無向グラフが与えられるので,他のすべての頂点への距離の平均が最も小さい頂点を探す.
解法
Warshall-Floydやるだけ.
const int INF = 100000000; int N, M; int d[310][310]; int c[310]; int main(){ scanf("%d%d", &N, &M); for(int i = 0; i <= N; ++i) for(int j = 0; j <= N; ++j) d[i][j] = i == j ? 0: INF; for(int i = 0; i < M; ++i){ int n; scanf("%d", &n); for(int j = 0; j < n; ++j) scanf("%d", &c[j]); for(int j = 0; j < n; ++j) for(int k = j + 1; k < n; ++k) d[c[j]][c[k]] = d[c[k]][c[j]] = 1; } for(int k=1;k<=N;++k)for(int i=1;i<=N;++i)for(int j=1;j<=N;++j) d[i][j] = min(d[i][j], d[i][k] + d[k][j]); int res = INF; for(int i = 1; i <= N; ++i){ int tmp = 0; for(int j = 1; j <= N; ++j) tmp += d[i][j]; res = min(res, tmp); } printf("%d\n", int(res / (N-1.0) * 100 + eps)); return 0; }