File tree Expand file tree Collapse file tree 1 file changed +57
-0
lines changed Expand file tree Collapse file tree 1 file changed +57
-0
lines changed Original file line number Diff line number Diff line change
1
+ // Authored by : scsc3204
2
+ // Co-authored by : -
3
+ // http://boj.kr/2c872055c09e448fa3250bcfb91d7513
4
+ #include < bits/stdc++.h>
5
+ using namespace std ;
6
+
7
+ const int INF = 0x3f3f3f3f ;
8
+ int d[102 ][102 ];
9
+
10
+ int main (void ) {
11
+ ios::sync_with_stdio (0 );
12
+ cin.tie (0 );
13
+
14
+ int n, m;
15
+ cin >> n >> m;
16
+
17
+ for (int i = 1 ; i <= n; i++) {
18
+ fill (d[i] + 1 , d[i] + n + 1 , INF);
19
+ d[i][i] = 0 ;
20
+ }
21
+ int u, v;
22
+ while (m--) {
23
+ cin >> u >> v;
24
+ d[u][v] = 1 ;
25
+ d[v][u] = 1 ;
26
+ }
27
+
28
+ for (int k = 1 ; k <= n; k++)
29
+ for (int i = 1 ; i <= n; i++)
30
+ for (int j = 1 ; j <= n; j++)
31
+ d[i][j] = min (d[i][j], d[i][k] + d[k][j]);
32
+
33
+ int ans, sum;
34
+ int min = INF;
35
+ for (int i = 1 ; i <= n; i++) {
36
+ sum = 0 ;
37
+ for (int j = 1 ; j <= n; j++)
38
+ sum += d[i][j];
39
+ if (sum < min) {
40
+ min = sum;
41
+ ans = i;
42
+ }
43
+ }
44
+ cout << ans;
45
+ }
46
+ /*
47
+ 플로이드-워셜 알고리즘을 활용한 풀이입니다.
48
+
49
+ 간선 정보를 받아 u-v, v-u로 가는 경로의 길이가 1이라고 설정합니다.
50
+ 자기 자신으로 향하는 경로의 길이는 0으로 설정합니다.
51
+ 그외 모든 경로는 INF로 초기화하고 시작합니다.
52
+ 플로이드-워셜 알고리즘(28-31번째 줄)을 통해
53
+ 임의의 노드 i에서 j로 향하는 최단 거리를 2차원 배열 d에 계산합니다.
54
+
55
+ 이후 한 노드 i에서 다른 노드 j로 향하는 모든 경로를 더한 값을 sum에 할당한 뒤
56
+ 최솟값과 비교합니다. 최솟값보다 작을 경우 sum을 갱신하고, 답을 i 노드로 갱신합니다.
57
+ */
You can’t perform that action at this time.
0 commit comments