티스토리 뷰
https://www.acmicpc.net/problem/2660
회원의 점수는 나머지 회원들까지 최단 거리의 최대값이다. 이 때 회원의 수가 최대 50명이므로 플로이드로 간편하게 구할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include <cstdio> #include <vector> #include <algorithm> using namespace std; int n,i,j,k,d[51][51],p[51],minv=100; int main() { scanf("%d",&n); for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(i!=j) d[i][j]=100; while(true) { scanf("%d %d",&i,&j); if(i==-1 && j==-1) break; d[i][j]=d[j][i]=1; } for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) d[i][j]=min(d[i][j],d[i][k]+d[k][j]); for(i=1;i<=n;i++) { int m=0; for(j=1;j<=n;j++) if(d[i][j]!=100) m=max(m,d[i][j]); p[i]=m; minv=min(minv,m); } vector<int> v; int cnt=0; for(i=1;i<=n;i++) if(p[i]==minv) cnt++,v.push_back(i); printf("%d %d\n",minv,cnt); for(i=0;i<cnt;i++) printf("%d ",v[i]); return 0; } | cs |
'Algorithm > BOJ' 카테고리의 다른 글
1786 찾기 (0) | 2018.02.27 |
---|---|
2698 인접한 비트의 개수 (0) | 2018.02.26 |
10163 색종이 (0) | 2018.02.26 |
10159 저울 (0) | 2018.02.26 |
2947 나무 조각 (0) | 2018.02.23 |