- Today
- Total
- ๋ฒจ๋งํฌ๋
- Algorithm
- ์์์ ๋ ฌ
- ์๋ฐ
- database
- ํ๋ก๊ทธ๋๋จธ์ค
- ๋ฌธ๋ฒ
- ์๋ฃ๊ตฌ์กฐ
- leetcode
- CS
- Graph
- ๊ตฌํ
- spring
- PS
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๋ค์ต์คํธ๋ผ
- ๋ฐฑ์๋
- MST
- array
- pytorch
- tree
- ์ธํด
- ์๋ฐ์์ ์
- BFS
- java
- ๋ฐฑ์ค
- OOP
- ๊ทธ๋ฆฌ๋
- ์กธ์ ์ํ
- dp
Partially Committed
[๋ฐฑ์ค 1197] ์ต์ ์คํจ๋ ํธ๋ฆฌ (JAVA) ๋ณธ๋ฌธ
[๋ฐฑ์ค 1197] ์ต์ ์คํจ๋ ํธ๋ฆฌ (JAVA)
WonderJay 2023. 1. 19. 14:59https://www.acmicpc.net/problem/1197
๋ฌธ์
๊ทธ๋ํ๊ฐ ์ฃผ์ด์ก์ ๋, ๊ทธ ๊ทธ๋ํ์ ์ต์ ์คํจ๋ ํธ๋ฆฌ๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ต์ ์คํจ๋ ํธ๋ฆฌ๋, ์ฃผ์ด์ง ๊ทธ๋ํ์ ๋ชจ๋ ์ ์ ๋ค์ ์ฐ๊ฒฐํ๋ ๋ถ๋ถ ๊ทธ๋ํ ์ค์์ ๊ทธ ๊ฐ์ค์น์ ํฉ์ด ์ต์์ธ ํธ๋ฆฌ๋ฅผ ๋งํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์ V(1 ≤ V ≤ 10,000)์ ๊ฐ์ ์ ๊ฐ์ E(1 ≤ E ≤ 100,000)๊ฐ ์ฃผ์ด์ง๋ค. ๋ค์ E๊ฐ์ ์ค์๋ ๊ฐ ๊ฐ์ ์ ๋ํ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ ์ธ ์ ์ A, B, C๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋ A๋ฒ ์ ์ ๊ณผ B๋ฒ ์ ์ ์ด ๊ฐ์ค์น C์ธ ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๋ค๋ ์๋ฏธ์ด๋ค. C๋ ์์์ผ ์๋ ์์ผ๋ฉฐ, ์ ๋๊ฐ์ด 1,000,000์ ๋์ง ์๋๋ค.
๊ทธ๋ํ์ ์ ์ ์ 1๋ฒ๋ถํฐ V๋ฒ๊น์ง ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๊ณ , ์์์ ๋ ์ ์ ์ฌ์ด์ ๊ฒฝ๋ก๊ฐ ์๋ค. ์ต์ ์คํจ๋ ํธ๋ฆฌ์ ๊ฐ์ค์น๊ฐ -2,147,483,648๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 2,147,483,647๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ง ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ต์ ์คํจ๋ ํธ๋ฆฌ์ ๊ฐ์ค์น๋ฅผ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
3 3
1 2 1
2 3 2
1 3 3
์์ ์ถ๋ ฅ 1
3
๊ทธ๋ฅ Minimum spanning tree(MST) ๋ฅผ ๊ตฌํ๋ฉด ๋๋ค.
์ฃผ์ด์ง ๋ฐ์ดํฐ๋ฅผ edge list ํํ๋ก ์ ์ฅํ๋๋ฐ, ์ค์ํ ๊ฒ์
๊ฐ์ค์น๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์์ผ๋ก ์ ์ฅํ๋ค.
์ด๋ฅผ ์ํด์ ์ฐ์ ์์ํ ํํ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฑํํ๋ค.
์ฐ์ ์์ํ์ ์ฃ์ง ์ ๋ณด๊ฐ ์ ์ฅ๋๋ฉด,
ํ์ฌ ์ํ์์ ๊ฐ์ฅ ๊ฐ์ค์น๊ฐ ์ต์์ธ ์ฃ์ง๋ฅผ ์ ํํ๊ณ ,
์ฌ์ดํด์ด ์ด๋ฃจ์ด์ง์ง ์๋๋ก ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ค.
์ด๋ฅผ ์ํด์ ์ ๋์จ&ํ์ธํธ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ์ฌ
์ฌ์ดํด์ ์ด๋ฃจ๋์ง ์ฌ๋ถ๋ฅผ ํ์ ํด์ผ ํ๋ค.
๊ตฌํ์ ์ด๋ ต์ง ์๋ค.
import java.io.*;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
static PriorityQueue<Edge> pq;
static int [] parent;
public static void main(String[] args) throws IOException {
System.setIn(new FileInputStream("src/input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk = new StringTokenizer(br.readLine());
int v = Integer.parseInt(stk.nextToken()); // ๋
ธ๋ ๊ฐ์
int e = Integer.parseInt(stk.nextToken()); // ์์ง ๊ฐ์
pq = new PriorityQueue<>();
for (int i = 0; i < e; i++) {
stk = new StringTokenizer(br.readLine());
int a = Integer.parseInt(stk.nextToken());
int b = Integer.parseInt(stk.nextToken());
int cost = Integer.parseInt(stk.nextToken());
pq.add(new Edge(a, b, cost));
}
parent = new int[v + 1];
for (int i = 1; i <= v; i++)
parent[i] = i; // ์ ๋์จ&ํ์ธํธ ๋ฐฐ์ด ์ด๊ธฐํ
int used = 0;
int min_cost=0;
while(used < v-1){
Edge now_edge = pq.poll();
if(find(now_edge.s) != find(now_edge.e)){
// ๋ถ๋ชจ๊ฐ ๋ค๋ฅด๋ฉด ์ฌ์ดํด์ด ํ์ฑ๋์ง ์๋ ๊ฒ
union(now_edge.s, now_edge.e); // ๊ทธ๋ฌ๋ฉด ์ฐ๊ฒฐ
min_cost+=now_edge.w;
used++;
}
}
System.out.println(min_cost);
}
static void union(int a, int b){
a = find(a);
b = find(b);
if(a!=b)
parent[b] = a;
}
static int find(int a){
if(parent[a] == a)
return a;
else return parent[a] = find(parent[a]);
}
static class Edge implements Comparable<Edge> {
int s;
int e;
int w;
public Edge(int s, int e, int w) {
this.s = s;
this.e = e;
this.w = w;
}
@Override
public int compareTo(Edge v) {
return this.w > v.w ? 1 : -1;
}
}
}
'๐ฅ Algorithm || ๋ฌธ์ ํ์ด > PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 1414] ๋ถ์ฐ์ด์๋๊ธฐ (JAVA) (0) | 2023.01.20 |
---|---|
[๋ฐฑ์ค 17472] ๋ค๋ฆฌ ๋ง๋ค๊ธฐ2 (JAVA) (0) | 2023.01.19 |
[๋ฐฑ์ค 1389] ์ผ๋น ๋ฒ ์ด์ปจ์ 6๋จ๊ณ ๋ฒ์น (0) | 2023.01.19 |
[๋ฐฑ์ค 11403] ๊ฒฝ๋ก ์ฐพ๊ธฐ (0) | 2023.01.19 |
[๋ฐฑ์ค 11404] ํ๋ก์ด๋ (0) | 2023.01.19 |