1 ๋ถ„ ์†Œ์š”

๐Ÿ“ [D4_3124] ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ

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 Solution {
	static StringTokenizer st;
	// ๋ถ€๋ชจ๋…ธ๋“œ ์ €์žฅํ•  ๋ฐฐ์—ด
	static int parents[];

	public static void main(String[] args) throws IOException {
		StringBuilder sb = new StringBuilder();
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		// ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ˆ˜
		int t = Integer.parseInt(br.readLine());

		for (int tc = 1; tc <= t; tc++) {
			sb.append("#").append(tc).append(" ");

			st = new StringTokenizer(br.readLine(), " ");

			// ์ •์ ์˜ ๊ฐœ์ˆ˜
			int V = Integer.parseInt(st.nextToken());

			// ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜
			int E = Integer.parseInt(st.nextToken());

			// ์ •์  ์ •๋ณด 2๊ฐœ + ์ด๋™๋ฆ ๊ฐ€์ค‘์น˜ ์ˆœ์œผ๋กœ ์ž…๋ ฅ์ด ๋“ค์–ด์˜จ๋‹ค
			int[][] edges = new int[E][3];

			// 1๋ฒˆ๋ถ€ํ„ฐ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด V+1
			parents = new int[V + 1];

			// ์ž…๋ ฅ๋ฐ›๊ธฐ
			for (int i = 0; i < E; i++) {
				st = new StringTokenizer(br.readLine(), " ");
				edges[i][0] = Integer.parseInt(st.nextToken());
				edges[i][1] = Integer.parseInt(st.nextToken());
				edges[i][2] = Integer.parseInt(st.nextToken());

			}

			// ๊ฐ€์ค‘์น˜ ์˜ค๋ฆ„ ์ฐจ์ˆœ์œผ๋กœ ์ •๋ฆฌ

			Arrays.sort(edges, new Comparator<int[]>() {

				@Override
				public int compare(int[] o1, int[] o2) {
					// TODO Auto-generated method stub
					// 2๋ฒˆ ์ธ๋ฑ์Šค์— ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋‹ค
					return Integer.compare(o1[2], o2[2]);
				}
			});

			// parents๋ฅผ -1๋กœ ์ดˆ๊ธฐํ™”
			Arrays.fill(parents, -1);

			// ์ถœ๋ ฅ๋  ๊ฐ€์ค‘์น˜์˜ ํ•ฉ
			long res = 0;
			int cnt = 0;

			// ๊ฐ„์„ ์˜ ์ˆ˜๋งŒํผ loop ์ˆ˜ํ–‰
			for (int i = 0; i < edges.length; i++) {
				// ์ •์ ๊ณผ ์ •์ ์ด ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธ
				if (union(edges[i][0], edges[i][1])) {
					res += edges[i][2]; // ๊ฐ€์ค‘์น˜ ๋ง์…ˆ
					cnt++;
				}

				// cnt๊ฐ€ ( ์ •์  -1๊ฐœ )๊ฐ€ ๋œ๋‹ค๋Š” ๊ฒƒ์€ ๋ชจ๋“  ์ •์ ์„ ๋‹ค ์—ฐ๊ฒฐํ–ˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ ์ข…ํšจ
				if (cnt == V - 1) {
					break;
				}
			}
			sb.append(res).append("\n");
		}
		System.out.println(sb);
	}

	public static int find(int x) {
		if (parents[x] < 0)
			return x;
		return parents[x] = find(parents[x]);
	}

	static boolean union(int x, int y) {
		int xRoot = find(x); 	// x์˜ root๋ฅผ ์ฐพ์•„์„œ ๊ฒฐ๊ณผ ๋ฐ›์Œ
		int yRoot = find(y);	// y์˜ root๋ฅผ ์ฐพ์•„์„œ ๊ฒฐ๊ณผ ๋ฐ›์Œ
		
		if(xRoot != yRoot) {
			parents[yRoot] = xRoot;
			return true;
		}
		// ์—ฐ๊ฒฐ์„ ํ•˜์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ๋ฉด false
		return false;
	}
}

๐Ÿค” ๋‚˜์˜ ์ƒ๊ฐ

๊ฐ€์ค‘์น˜์˜ ํ•ฉ์ด ์ตœ์†Œ๋ฅผ ์ถœ๋ ฅํ•ด์•ผํ•œ๋‹ค.
๋ธ”๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ๊ณต๋ถ€ํ•˜์˜€๋‹ค.
์„ค๋ช…์ด ๋„ˆ๋ฌด ์ž˜ ๋˜์–ด์žˆ์–ด์„œ ์ฒจ๋ถ€ํ•œ๋‹ค.
๋‚˜์ค‘์— ํ•œ ๋ฒˆ ๋‹ค์‹œ ํ’€๊ณ  ๋‚ด ์ƒ๊ฐ์„ ์ •๋ฆฌํ•ด ๋ณด๊ฒ ๋‹ค.