$O(n^3)$
친구 사이이면 가중치를 1, 그렇지 않으면 무한대로 설정하고 플로이드 알고리즘을 돌린다.
회원 x의 점수는 x와 나머지 회원간 최대 가중치이다.
#include<cstdio> int d[51][51], n, x, y, maxi[51], can = 1e9, cnt; int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) if (i^j) d[i][j] = 1e9; while (scanf("%d%d", &x, &y), ~x) d[x][y] = d[y][x] = 1; for (int k = 1; k <= n; k++) for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) if (d[i][j] > d[i][k] + d[k][j]) d[i][j] = d[i][k] + d[k][j]; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) if (maxi[i] < d[i][j]) maxi[i] = d[i][j]; if (can > maxi[i]) can = maxi[i], cnt = 0; cnt += can == maxi[i]; } printf("%d %d\n", can, cnt); for (int i = 1; i <= n; i++) if (maxi[i] == can) printf("%d ", i); return 0; }
댓글 없음 :
댓글 쓰기