https://www.acmicpc.net/problem/1197
1197๋ฒ: ์ต์ ์คํจ๋ ํธ๋ฆฌ
์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์ V(1 ≤ V ≤ 10,000)์ ๊ฐ์ ์ ๊ฐ์ E(1 ≤ E ≤ 100,000)๊ฐ ์ฃผ์ด์ง๋ค. ๋ค์ E๊ฐ์ ์ค์๋ ๊ฐ ๊ฐ์ ์ ๋ํ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ ์ธ ์ ์ A, B, C๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋ A๋ฒ ์ ์ ๊ณผ B๋ฒ ์ ์ ์ด
www.acmicpc.net
์ผ๋ฐ์ ์ธ ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํ๋ฉด ๋๋ค.
1. ๊ฐ์ -> ๋น์ฉ ๊ธฐ์ค ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
2. ์ฌ์ดํด์ด ๋ฐ์ํ์ง ์์ผ๋ฉด(= parent๊ฐ ๊ฐ์ง ์์ผ๋ฉด) union
ํ๋ฒ ์๋ฌ๋ฌ์๋๋ฐ,,, ์ด์ด์๊ฒ๋ cost ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๋ค๋ ์๊ฐ์ ์ฌ๋ก์กํ์
๊ฐ์ ์ ๋ํ ์ ๋ณด a, b, c๋ฅผ ์ ๋ ฅ ๋ฐ์ ๋ c, a, b๋ก ์ ๋ ฅ๋ฐ์,,ใ ์ค์ํ์ง ๋ง์
import sys
sys.setrecursionlimit(10000)
input = sys.stdin.readline
def find(parent, x):
if parent[x] != x:
parent[x] = find(parent, parent[x])
return parent[x]
def union(parent, a, b):
a = find(parent, a)
b = find(parent, b)
if a < b:
parent[b] = a
else:
parent[a] = b
v, e = map(int, input().split())
parent = [0] * (v+1)
for i in range(1, v+1):
parent[i] = i
edges = []
for _ in range(e):
a, b, c = map(int, input().split())
edges.append((c, a, b))
edges.sort()
res = 0
for i in edges:
c, a, b = i
if find(parent, a) != find(parent, b):
union(parent, a, b)
res += c
print(res)
'๐ค > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 2887: ํ์ฑ ํฐ๋ (Python) (0) | 2022.08.04 |
---|---|
๋ฐฑ์ค 1774: ์ฐ์ฃผ์ ๊ณผ์ ๊ต๊ฐ (Python) (0) | 2022.08.04 |
๋ฐฑ์ค 4195: ์น๊ตฌ ๋คํธ์ํฌ (Python) (0) | 2022.07.28 |
๋ฐฑ์ค 1976: ์ฌํ ๊ฐ์ (Python) (0) | 2022.07.28 |
๋ฐฑ์ค 1717: ์งํฉ์ ํํ (Python) (0) | 2022.07.28 |