๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿƒ algorithm/boj

BOJ 1197 - ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ

by HandHand 2021. 6. 18.

๋ฌธ์ œ

๋ฐฑ์ค€ ์˜จ๋ผ์ธ ์ €์ง€ - 1197๋ฒˆ

ํ’€์ด ๊ณผ์ •

์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
๊ธฐ๋ณธ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„๋กœ ๋ณต์žกํ•œ ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค.
์˜ค๋žœ๋งŒ์— MST ๋ฌธ์ œ๋ฅผ ํ•œ๋ฒˆ ํ’€์–ด๋ณด๊ณ  ์‹ถ์–ด์„œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•œ๋ฒˆ ํ’€์–ด๋ดค์Šต๋‹ˆ๋‹ค. ๐Ÿ˜„

์ฝ”๋“œ


import sys


def union(u, v):
    pu, pv = find(u), find(v)

    if pu != pv:
        if rank[pu] > rank[pv]:
            parent[pv] = pu
        else:
            parent[pu] = pv
            if rank[pu] == rank[pv]:
                rank[pv] += 1


def find(u):
    if parent[u] == u:
        return u

    parent[u] = find(parent[u])

    return parent[u]


def solution():
    acc = 0

    edges.sort(key=lambda edge: edge[2])

    for frm, to, weight in edges:
        if find(frm) != find(to):
            union(frm, to)
            acc += weight

    return acc


if __name__ == '__main__':
    V, E = list(map(int, sys.stdin.readline().split()))
    edges = [list(map(int, sys.stdin.readline().split())) for _ in range(E)]

    parent = [i for i in range(V + 1)]
    rank = [0 for _ in range(V + 1)]

    answer = solution()

    print(answer)
๋ฐ˜์‘ํ˜•

'๐Ÿƒ algorithm > boj' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ 13700 - ์™„์ „ ๋ฒ”์ฃ„  (0) 2021.06.29
BOJ 14950 - ์ •๋ณต์ž  (0) 2021.06.25
BOJ 4963 - ์„ฌ์˜ ๊ฐœ์ˆ˜  (0) 2021.06.15
BOJ 5568 - ์นด๋“œ ๋†“๊ธฐ  (0) 2021.06.14
BOJ 5972 - ํƒ๋ฐฐ ๋ฐฐ์†ก  (0) 2021.06.10

๐Ÿ’ฌ ๋Œ“๊ธ€