๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/๋ฐฑ์ค€

[๋ฐฑ์ค€] 14940 ์‰ฌ์šด ์ตœ๋‹จ๊ฑฐ๋ฆฌ(ํŒŒ์ด์ฌ/python)

by chjcoder 2023. 8. 17.

๐ŸŽˆ๋ฌธ์ œ

https://www.acmicpc.net/problem/20955

 

๐ŸŽ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜?

1. union-find ์•Œ๊ณ ๋ฆฌ์ฆ˜

๐Ÿ’ป์ฝ”๋“œ

# 20955 ๋ฏผ์„œ์˜ ์‘๊ธ‰ ์ˆ˜์ˆ 

# import sys

# input = sys.stdin.readline

def find(x):
    if parent[x] != x:
        parent[x] = find(parent[x])
    return parent[x]

def union(a,b):
    ra = find(a)
    rb = find(b)
    parent[ra] = parent[rb] = min(ra,rb)

# 1. ์ž…๋ ฅ
n,m = map(int,input().split())
parent = [i for i in range(n+1)]
cnt = 0

for _ in range(m):
    u,v = map(int,input().split())

    if find(u) == find(v):  # ๋ถ€๋ชจ๊ฐ€ ๊ฐ™์œผ๋ฉด ์‹ธ์ดํด
        cnt += 1
    else:   # ์‹ธ์ดํด์ด ์—†์œผ๋ฉด union
        union(u,v)

# ๋–จ์–ด์ง„ ๋…ธ๋“œ ์ตœ์ƒ์œ„ ๋…ธ๋“œ์— ์—ฐ๊ฒฐ
for i in range(1,n+1):
    if find(i-1) != find(i):
        union(i-1,i)
        cnt += 1

print(cnt-1)

๐ŸŽ„์ฝ”๋“œ ์„ค๋ช…

1. ๋ถ€๋ชจ(์ตœ์ƒ์œ„ ๋…ธ๋“œ)๊ฐ€ ๊ฐ™์œผ๋ฉด ์‹ธ์ดํด์ด ๋˜๋ฏ€๋กœ ํŠธ๋ฆฌ๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด ์—ฐ๊ฒฐ์„ ๋Š์–ด์ค˜์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ cnt + 1

2. ๋ถ€๋ชจ๊ฐ€ ๊ฐ™์ง€ ์•Š์œผ๋ฉด ์‹ธ์ดํด์ด ์•„๋‹ˆ๋ฏ€๋กœ ๋ถ€๋ชจ ๋…ธ๋“œ๋งŒ ์ฐพ์•„๋†“๋Š”๋‹ค.

3. for๋ฌธ์„ ํ•œ๋ฒˆ ๋” ๋Œ๋ ค์„œ ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ๋‹ค๋ฅธ ํŠธ๋ฆฌ๋“ค์„ ํ•˜๋‚˜์˜ ํŠธ๋ฆฌ๋กœ ์ด์–ด์ค€๋‹ค. ์ด๋•Œ, ์ด์–ด์ค€ ๊ฐœ์ˆ˜๋งŒํผ cnt + 1