BOJ
[JAVA] 백준 1197번 - 최소 스패닝 트리
yujinkimkim
2023. 7. 11. 13:55
1197번: 최소 스패닝 트리 (acmicpc.net)
1197번: 최소 스패닝 트리
첫째 줄에 정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000)가 주어진다. 다음 E개의 줄에는 각 간선에 대한 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 정점과 B번 정점이
www.acmicpc.net
스패닝 트리 구현법!
MST가 최소비용신장트리를 말하는데 간선들의 가중치 합이 최소인 신장 트리를 말한다네용 그 방법에는
1. 크루스칼 -> 유니온 파인드 사용
2. 프림 -> 우선순위큐로 다익스트라 하듯이
하면 된다는데
유니온 파인드 며칠 전에 해봤으니 응용삼아 크루스칼로 해보겠슴니다
할 때 중요한게 간선 중심으로 오름차순으로 정리해야한대요
이때 정렬 위해서 Comparable<T> 인터페이스를 사용하는데 첨 봐서 찾아봤슴니다
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com
package baekjoon;
import java.util.*;
import java.io.*;
class edge implements Comparable<edge>
{
int start;
int end;
int cost;
public edge(int start, int end, int cost)
{
this.start = start;
this.end = end;
this.cost = cost;
}
@Override
public int compareTo(edge obj)
{
return obj.cost >= this.cost ? -1 : 1;
}
}
public class b1197 {
static ArrayList <edge> list;
static int[] parent;
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int V = Integer.parseInt(st.nextToken());
int E = Integer.parseInt(st.nextToken());
parent = new int [V+1];
for(int i = 1 ; i <= V ; i++)
parent[i] = i;
list = new ArrayList<edge>(); // ArrayList 초기화
for(int i = 0 ; i < E ; i++)
{
st = new StringTokenizer(br.readLine());
list.add(new edge(Integer.parseInt(st.nextToken()),Integer.parseInt(st.nextToken()),Integer.parseInt(st.nextToken())));
}
Collections.sort(list);
int sum = 0;
for(edge i : list)
{
if(union(i.start, i.end))
sum += i.cost;
}
bw.write(sum+"");
bw.close();
}
public static int find(int n)
{
if(parent[n] == n)
return n;
return parent[n] = find(parent[n]);
}
public static boolean union(int n, int m)
{
int nRoot = find(n);
int mRoot = find(m);
if(nRoot != mRoot)
{
parent[mRoot] = nRoot;
return true;
}
else
return false;
}
}
유니온 파인드 외워야겠어요..
알리에서 산 버티컬 마우스 후기인데요..
이거 풀면서 구글링하고 코드 드래그하고 하면서 느낀 점인데요...
돈 더 주고 비싼거 사야겠다 싶었슴니다...커서가 드 르르 르 르륵 움직임 ㅠ