Algorithm/๋ฐฑ์ค
[๋ฐฑ์ค] 14940 ์ฌ์ด ์ต๋จ๊ฑฐ๋ฆฌ(ํ์ด์ฌ/python)
chjcoder
2023. 8. 17. 22:19
๐๋ฌธ์
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