Algorithm
[BOJ_6497]์ ๋ ฅ๋ (๊ณจ๋ 4) - JAVA
์ด์๋ฐ
2023. 12. 8. 20:00
๐พ ์๊ณ ๋ฆฌ์ฆ
- ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ
- MST
- ๋ถ๋ฆฌ์งํฉ ( ์๋ก์ ์งํฉ)
- Union - find
๐พ ์๊ฐ ํฌ์ธํธ
- ๋ง์ง๋ง ๋ต์ ๋์ถํ ๋ total cost์์ ์ต์ ๋น์ฉ์ ๋นผ์ค์ผ ์ ์ฝํ ์ต๋๋น์ฉ์ด ์ถ๋ ฅ๋๋ค.
- ๋ ์ฒ์์ ์ต๋๋น์ฉ์ ์ถ๋ ฅํ๋ผ๊ณ ํด์ ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ๊ณผ๋ ๋ฐ๋๋ก ๊ฐ์ ์ ์ ๋ ฌํ ๋ ๊ฐ์ค์น๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋๋ ์ค๋ต์ด ๋์ถ๋์๋ค. ์ ์๊ฐํด๋ณด๋, ์ต์๋น์ฉ์ ์ ์ฒด์์ ๋นผ์ค์ผ ํ๋ค.
๐พ ์์ค์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
public class Main_6497 {
static int[] parent;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
out: while (true) {
st = new StringTokenizer(br.readLine());// ์ง์ ์ (์ ์ )
int m = Integer.parseInt(st.nextToken());// ๊ธธ์ ์(๊ฐ์ )
int n = Integer.parseInt(st.nextToken());
if (n == 0 && m == 0) {
break out;
}
int[][] edges = new int[n][3];
int total = 0;
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
edges[i][0] = Integer.parseInt(st.nextToken()); // from
edges[i][1] = Integer.parseInt(st.nextToken()); // to
edges[i][2] = Integer.parseInt(st.nextToken()); // ๊ฐ์ค์น
total += edges[i][2];
}
Arrays.sort(edges, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[2] - o2[2];
}
});
// for (int[] e : edges) {
// System.out.println("๋ด๋ฆผ์ฐจ์ : " + Arrays.toString(e));
// }
parent = new int[m+1];
for (int i = 1; i < m+1; i++) {
parent[i] = i;
}
int ans = 0;
int pick = 0;
for (int i = 0; i < n; i++) {
int x = edges[i][0];
int y = edges[i][1];
if (findset(x) != findset(y)) {
union(x, y);
ans += edges[i][2];
// System.out.println(ans);
pick++;
}
if (pick == m - 1)
break;
}
System.out.println(total - ans);
} // while
}
private static void union(int x, int y) {
parent[findset(y)] = findset(x);
}
private static int findset(int x) {
if (x != parent[x])
return parent[x] = findset(parent[x]);
return x;
}
}
๐ต๐ซ ๊ณต๋ถํด์ผ ํ ์
- ์๊ณ ๋ฆฌ์ฆ ์๋ฆฌ๋ฅผ ์ ์๊ฐํ๋ฉด์ ํ์!
- ๋จ๊ธฐ ๊ธฐ์ต ๊ธ์ง.. ๋ด๊ฒ์ผ๋ก ๋ง๋ค๊ธฐ..