Skip to content

Commit cc675fc

Browse files
authored
[백준 16202] MST 게임 - MST
1 parent 6c32450 commit cc675fc

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed

hoseok/week80/Boj16202.java

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
class Main {
5+
6+
static class Edge {
7+
int a, b, cost;
8+
9+
public Edge(int a, int b, int cost) {
10+
this.a = a;
11+
this.b = b;
12+
this.cost = cost;
13+
}
14+
}
15+
16+
static int n, m, k;
17+
static Edge[] edges;
18+
static int[] parents;
19+
20+
public static void main(String[] args) throws Exception {
21+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
22+
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
23+
StringTokenizer st = new StringTokenizer(br.readLine());
24+
n = Integer.parseInt(st.nextToken());
25+
m = Integer.parseInt(st.nextToken());
26+
k = Integer.parseInt(st.nextToken());
27+
edges = new Edge[m];
28+
29+
for (int i = 0; i < m; i++) {
30+
st = new StringTokenizer(br.readLine());
31+
int a = Integer.parseInt(st.nextToken());
32+
int b = Integer.parseInt(st.nextToken());
33+
edges[i] = new Edge(a, b, i + 1);
34+
}
35+
36+
StringBuilder answer = new StringBuilder();
37+
for (int edgeCost = 1; edgeCost <= k; edgeCost++) {
38+
parents = new int[n + 1];
39+
for (int i = 0; i <= n; i++) {
40+
parents[i] = i;
41+
}
42+
43+
int count = 0;
44+
int sum = 0;
45+
46+
for (int i = edgeCost; i <= m && count < n - 1; i++) {
47+
Edge edge = edges[i - 1];
48+
49+
if (union(edge.a, edge.b)) {
50+
count++;
51+
sum += edge.cost;
52+
}
53+
}
54+
55+
if (count < n - 1) {
56+
answer.append("0 ");
57+
} else {
58+
answer.append(sum).append(" ");
59+
}
60+
}
61+
62+
bw.write(answer.toString());
63+
bw.flush();
64+
bw.close();
65+
}
66+
67+
public static boolean union(int a, int b) {
68+
a = find(a);
69+
b = find(b);
70+
71+
if (a == b) {
72+
return false;
73+
}
74+
if (a > b) {
75+
parents[a] = b;
76+
} else {
77+
parents[b] = a;
78+
}
79+
return true;
80+
}
81+
82+
public static int find(int a) {
83+
if (a == parents[a]) {
84+
return a;
85+
}
86+
87+
return parents[a] = find(parents[a]);
88+
}
89+
}

0 commit comments

Comments
 (0)