๋ฌธ์
๋ฐฑ์ค ์จ๋ผ์ธ ์ ์ง - 1๋ฒ
ํ์ด ๊ณผ์
๋ชจ๋ ์ ์ ์ ์๋ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฌธ์ ์
๋๋ค.
์ฆ, ์ต์ ์คํจ๋ ํธ๋ฆฌ๋ฅผ ๊ตฌํํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ
์ ํ์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
๋ค๋ง ๊ฐ ๊ฒฝ๋ก๋ฅผ ์ ํํ ๋๋ง๋ค ๋ชจ๋ ๊ฐ์ ์ ๋น์ฉ์ด ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ t * ์ด์ ๊น์ง ์ ํ๋ ๊ฐ์ ์ ๊ฐ์
๋งํผ ์ถ๊ฐ์ ์ธ ๊ฐ์ ๋์ ํด์ค๋๋ค.
์ฝ๋
import sys
def union(u, v):
pv, pu = find(u), find(v)
if pv != pu:
if rank[pv] > rank[pu]:
parent[pu] = pv
else:
if rank[pv] == rank[pu]:
rank[pu] += 1
parent[pv] = pu
def find(u):
if parent[u] == u:
return u
parent[u] = find(parent[u])
return parent[u]
def solution():
acc = 0
found = 0
roads.sort(key=lambda r: r[2])
for frm, to, cost in roads:
if find(frm) != find(to):
union(frm, to)
acc += (cost + found * t)
found += 1
if found == N - 1:
break
return acc
if __name__ == '__main__':
N, M, t = list(map(int, sys.stdin.readline().split()))
roads = [list(map(int, sys.stdin.readline().split())) for _ in range(M)]
parent = [v for v in range(N + 1)]
rank = [0] * (N + 1)
answer = solution()
print(answer)
๋ฐ์ํ
'๐ algorithm > boj' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ 1920 - ์ ์ฐพ๊ธฐ (0) | 2021.07.05 |
---|---|
BOJ 13700 - ์์ ๋ฒ์ฃ (0) | 2021.06.29 |
BOJ 1197 - ์ต์ ์คํจ๋ ํธ๋ฆฌ (0) | 2021.06.18 |
BOJ 4963 - ์ฌ์ ๊ฐ์ (0) | 2021.06.15 |
BOJ 5568 - ์นด๋ ๋๊ธฐ (0) | 2021.06.14 |
๐ฌ ๋๊ธ