<λ¬Έμ λ§ν¬>
https://www.acmicpc.net/problem/14621
14621λ²: λλ§ μλλ μ°μ
μ λ ₯μ 첫째 μ€μ νκ΅μ μ Nμ νκ΅λ₯Ό μ°κ²°νλ λλ‘μ κ°μ Mμ΄ μ£Όμ΄μ§λ€. (2 ≤ N ≤ 1,000) (1 ≤ M ≤ 10,000) λμ§Έ μ€μ κ° νκ΅κ° λ¨μ΄ λνκ΅λΌλ©΄ M, μ¬μ΄ λνκ΅λΌλ©΄ Wμ΄ μ£Όμ΄μ§λ€. λ€μ Mκ°μ
www.acmicpc.net
<νμ΄ μ λ΅>
1. κΈ°λ³Έμ μΈ MST λ¬Έμ μ΄λ€.
2. λνκ΅ λ¨μ΄/μ¬μ΄ μ¬λΆλ₯Ό λμ λ리 ννλ‘ μ μ₯ν΄μ ν¬λ£¨μ€μΉΌ μκ³ λ¦¬μ¦μμ λ€μ κ°μ μ ν μ λ€λ₯Έ μ’ λ₯μ λνκ΅μΌ κ²½μ°λ§ μ ννλλ‘ νλ€.
3. κ·Έ μΈμλ 쑰건μ λ§μ‘±νλ mstκ° μμ κ²½μ° -1μ μΆλ ₯νλλ‘ ν΄μΌλλ€.
<μ λ΅ μ½λ>
import sys, os, io, atexit
input = lambda: sys.stdin.readline().rstrip('\r\n')
stdout = io.BytesIO()
sys.stdout.write = lambda s: stdout.write(s.encode("ascii"))
atexit.register(lambda: os.write(1, stdout.getvalue()))
# 220927 14621 λλ§ μλλ μ°μ
# μ λ΅μ½λ
# μ΅μ μ μ₯νΈλ¦¬λ₯Ό μν μ λμ¨νμΈλ ν¨μ
def find(x):
if parent[x] != x:
parent[x] = find(parent[x])
return parent[x]
def merge(x, y):
x = find(x)
y = find(y)
if x < y:
parent[y] = x
else:
parent[x] = y
return
# N: νκ΅μ κ°μ, M: λλ‘μ κ°μ
N, M = map(int, input().split())
# univ: κ° λνκ΅μ λ¨μ΄/μ¬μ΄ μ¬λΆ
univ = dict(enumerate(list(input().split()), start=1))
# parent: λΆλͺ¨ λ
Έλ λ°°μ΄
parent = [i for i in range(N + 1)]
# graph: λνκ΅ κ·Έλν μ°κ²° μ 보
graph = []
for _ in range(M):
node1, node2, weight = map(int, input().split())
graph.append((weight, node1, node2))
graph.sort()
# μ΅μ μ μ₯ νΈλ¦¬λ‘ λ¬Έμ ν΄κ²°
def solve():
# ans: κ²½λ‘μ μ΅μ κΈΈμ΄, cnt: κ²½λ‘λ‘ μ°κ²°λ λνκ΅ κ°μ
ans = 0
cnt = 0
for i in range(M):
distance, node1, node2 = graph[i]
if univ[node1] != univ[node2]:
if find(node1) != find(node2):
# λνκ΅ μ°κ²°
merge(node1, node2)
# κ²½λ‘ κΈΈμ΄ κ³μ° ν, λνκ΅ μΈμ£ΌκΈ°
ans += distance
cnt += 1
# λͺ¨λ λνκ΅κ° μ°κ²°λμμ κ²½μ° μ λ΅ μΆλ ₯ ν λ°ν
if cnt == N - 1:
print(ans)
return
# λͺ¨λ νκ΅λ₯Ό μ°κ²°νλ κ²½μ°κ° μμ κ²½μ° -1 μΆλ ₯ ν λ°ν
print(-1)
return
solve()
'β Problem_Solving > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] 2437 μ μΈ (Python/νμ΄μ¬) (1) | 2022.10.03 |
---|---|
[λ°±μ€] 20056 λ§λ²μ¬ μμ΄μ νμ΄μ΄λ³Ό (Python/νμ΄μ¬) (0) | 2022.10.03 |
[λ°±μ€] 16724 νΌλ¦¬ λΆλ μ¬λμ΄ (Python/νμ΄μ¬) (0) | 2022.10.02 |
[λ°±μ€] 2146 λ€λ¦¬ λ§λ€κΈ° (Python/νμ΄μ¬) (0) | 2022.10.01 |
[λ°±μ€] 20055 μ»¨λ² μ΄μ΄ λ²¨νΈ μμ λ‘λ΄ (Python/νμ΄μ¬) (1) | 2022.09.30 |
λκΈ