본문 바로가기
알고리즘/SW Expert

SW expert 3124 최소 스패닝 트리 (자바)

by 김어찐 2021. 9. 16.
728x90
import java.util.Arrays;
import java.util.Scanner;
import java.io.FileInputStream;


class Solution
{
	public static void main(String args[]) throws Exception
	{

		System.setIn(new FileInputStream("sample_input.txt"));


		Scanner sc = new Scanner(System.in);
		int T;
		T=sc.nextInt();

		for(int test_case = 1; test_case <= T; test_case++)
		{
			long answer = 0;
			int V = sc.nextInt();
			int E = sc.nextInt();
			int[] parents = new int[V+1];
			Line[] lines = new Line[E];
			for (int i = 0; i < E; i++) {
				lines[i] = new Line(sc.nextInt(), sc.nextInt(), sc.nextInt());
			}
			for (int i = 1; i <= V; i++) {
				parents[i] = i;
			}
			Arrays.sort(lines);
			int count=0;
			for (Line line : lines) {
				int a = findParent(parents,line.a);
				int b = findParent(parents,line.b);
				if(a!=b) {
					unionParent(parents,a,b);
					count++;
					answer+=line.cost;
				}
				if(count==V-1) break;
			}
			
			
			System.out.printf("#%d %d\n",test_case,answer);
		}
	}

	private static void unionParent(int[] parents, int a, int b) {
		if(a<b) {
			parents[b]=a;
		}
		else parents[a]=b;
		
	}

	private static int findParent(int[] parents, int x) {
		if(parents[x]!=x) {
			parents[x] =findParent(parents, parents[x]);
		}
		return parents[x];
	}
	
}
class Line implements Comparable<Line>{
	
	int a;
	int b;
	int cost;
	
	public Line(int a, int b, int cost) {
		super();
		this.a = a;
		this.b = b;
		this.cost = cost;
	}
	@Override
	public int compareTo(Line o) {
		// TODO Auto-generated method stub
		return this.cost - o.cost;
	}


}
728x90

'알고리즘 > SW Expert' 카테고리의 다른 글

SW Expert 보급로 (자바)  (0) 2021.09.30
SW expert 사람 네트워크2 (자바)  (0) 2021.09.16
SW Expert 3307 최장 증가 부분수열 (자바)  (0) 2021.09.16
1251 하나로  (0) 2021.08.25