|
也可以用floyd。
#include <stdio.h> #include <string.h>
#define MAX_N 332
char conn[MAX_N][MAX_N], visited[MAX_N]; int N, M, qh, qt, min_val, val; struct { int step, idx; } queue[MAX_N];
__inline void insert(int i, int s) { if (visited[i]) return ; queue[qt].idx = i; queue[qt].step = s; val += s; qt++; visited[i] = 1; }
__inline void bfs(int idx) { int i, step;
memset(visited, 0, N + 1); val = qh = qt = 0; insert(idx, 0); while (qh != qt) { idx = queue[qh].idx; step = queue[qh].step; qh++; for (i = 1; i <= N; i++) if (conn[idx][i]) insert(i, step + 1); } if (val < min_val) min_val = val; }
int main() { int i, j, cnt, arr[MAX_N], a, b;
freopen("e:\\test\\in.txt", "r", stdin);
min_val = 0x7fffffff; scanf("%d%d", &N, &M); while (M--) { scanf("%d", &cnt); for (i = 0; i < cnt; i++) { scanf("%d", &arr[i]); for (j = 0; j < i; j++) { a = arr[i]; b = arr[j]; conn[a][b] = conn[b][a] = 1; } } } for (i = 1; i <= N; i++) bfs(i); printf("%d\n", 100 * min_val / (N - 1));
return 0; }
|