https://www.acmicpc.net/problem/1774
๐ ์๋ฐ๋ก ํธ๋ ์ฐ์ฃผ์ ๊ณผ์ ๊ต๊ฐ ๋ฌธ์ ํ์ด
๐ ๋ฌธ์ ๊ฐ์
๋ฐฑ์ค 1774๋ฒ ์ฐ์ฃผ์ ๊ณผ์ ๊ต๊ฐ ๋ฌธ์ ๋
N๊ฐ์ ์ ๋ค๊ณผ ์ด๋ฏธ ์ฐ๊ฒฐ๋ M๊ฐ์ ํต๋ก ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋,
๋ชจ๋ ์ฐ์ฃผ์ ์ด ์ฐ๊ฒฐ๋๋๋ก ์ถ๊ฐ๋ก ์ฐ๊ฒฐํด์ผ ํ ์ต์ ๊ฑฐ๋ฆฌ์ ํฉ์ ๊ตฌํ๋ ๋ฌธ์ ์ ๋๋ค.
- ๊ฐ ์ฐ์ฃผ์ ์ 2์ฐจ์ ์ขํ ์์ ์กด์ฌ
- ์ด๋ฏธ ์ฐ๊ฒฐ๋ ํต๋ก๋ ์ถ๊ฐ ๋น์ฉ ์์ด ์ฌ์ฉ ๊ฐ๋ฅ
- ๋ชฉํ๋ ์ ์ฒด ์ฐ์ฃผ์ ์ ์ฐ๊ฒฐํ๋ ์ต์ ๋น์ฉ
๐ก ์์ ์ ๋ ฅ
4 1
1 1
2 2
2 4
3 3
1 4
์์ ์ถ๋ ฅ
2.00
๐ ์๊ณ ๋ฆฌ์ฆ ์ ๊ทผ ๋ฐฉ์
์ด ๋ฌธ์ ๋ ๊ธฐ์กด ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ๊ณ ๋ คํ ์ต์ ์ ์ฅ ํธ๋ฆฌ(MST) ๋ฌธ์ ์ ๋๋ค.
โ ํต์ฌ ์์ด๋์ด
- ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด ๊ฑฐ๋ฆฌ ๊ธฐ์ค ์ค๋ฆ์ฐจ์ ๊ฐ์ ์ ํ
- M๊ฐ์ ์ด๋ฏธ ์ฐ๊ฒฐ๋ ํต๋ก๋ ๋จผ์ union() ์ฒ๋ฆฌ
- ์ดํ ๋ชจ๋ ๊ฐ๋ฅํ ๋ ์ ๊ฐ ๊ฑฐ๋ฆฌ(๊ฐ์ )๋ฅผ ๊ตฌํด PriorityQueue์ ์ ์ฅ
- ์ฌ์ดํด์ ํผํ๋ฉฐ ์ต์ ๊ฐ์ ์ ์ ํํ์ฌ MST ์์ฑ
๐งพ ์ฝ๋ ํด์ค
๐ช ์ขํ ์ ๋ ฅ ๋ฐ ์ ๋์จ ์ด๊ธฐํ
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
gods = new int[N+1][2];
p = new int[N+1];
for(int i = 1; i <= N; i++) {
st = new StringTokenizer(br.readLine());
gods[i][0] = Integer.parseInt(st.nextToken());
gods[i][1] = Integer.parseInt(st.nextToken());
p[i] = i;
}
๐ฐ ์ด๋ฏธ ์ฐ๊ฒฐ๋ ํต๋ก union ์ฒ๋ฆฌ
for(int i = 1; i <= M; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
if(union(a,b)) count++;
}
๐ ๊ฐ๋ฅํ ๊ฐ์ ์์ฑ (๋ชจ๋ ๋ ์ ์)
for(int i = 1; i <= N; i++) {
for (int j = i + 1; j <= N; j++) {
pq.add(new Line(i,j));
}
}
๐ ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก MST ์์ฑ
while (!pq.isEmpty()) {
if (count == N - 1) break;
Line l = pq.poll();
if (union(l.a, l.b)) {
answer += l.value;
count++;
}
}
System.out.println(String.format("%.2f", answer));
๐ ๊ฑฐ๋ฆฌ ๊ณ์ฐ ํจ์
private static double getDistance(int a, int b) {
return Math.sqrt(Math.pow(gods[a][0]-gods[b][0],2) + Math.pow(gods[a][1]-gods[b][1],2));
}
โ ํต์ฌ ํฌ์ธํธ ์์ฝ
- ํฌ๋ฃจ์ค์นผ์ ์ฌ์ฉํ MST ๋ฌธ์
- ๊ธฐ์กด ๊ฐ์ (M๊ฐ)์ ๋ฏธ๋ฆฌ union() ์ฒ๋ฆฌํด์ ์ฐ๊ฒฐ ์ํ ๋ฐ์
- ๊ฑฐ๋ฆฌ ๊ณ์ฐ์ ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ (sqrt(x² + y²))
- ์ต์ ๊ฐ์ ์๋ N - 1์ด๋ฉฐ, count๋ก ์ถ์
๐ ๊ฒฐ๋ก : ์ฐ๊ฒฐ์ ํ์ฅํ๋ ์ต์ํ์ ๊ธธ
์ด ๋ฌธ์ ๋ MST์์ ๊ธฐ์กด ์ฐ๊ฒฐ ์ ๋ณด๊ฐ ์ฃผ์ด์ง ๋์ ์ฒ๋ฆฌ ๋ฐฉ์์ ๋ฌป๋ ๋ฌธ์ ์ ๋๋ค.
์ฌ์ดํด์ ํผํ๋ฉด์, ๊ฐ๋ฅํ ํ ์งง์ ๊ฑฐ๋ฆฌ์ ํต๋ก๋ง์ ์ ํํด์ผ ํ์ฃ .
'Algorithm & Data Structures > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
b10942. ํ ๋ฆฐ๋๋กฌ? (0) | 2025.05.20 |
---|---|
b1655. ๊ฐ์ด๋ฐ๋ฅผ ๋งํด์ (0) | 2025.05.19 |
b4386. ๋ณ์๋ฆฌ ๋ง๋ค๊ธฐ (0) | 2025.05.13 |
b20040. ์ฌ์ดํด๊ฒ์ (0) | 2025.05.12 |
b9372. ์๊ทผ์ด์ ์ฌํ (0) | 2025.05.11 |