๐๋ฌธ์
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
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 17484 ์ง์ฐ์ ๋ฌ ์ฌํ(ํ์ด์ฌ/python) (0) | 2023.08.19 |
---|---|
[๋ฐฑ์ค] 2638 ์น์ฆ(ํ์ด์ฌ/python) (0) | 2023.08.18 |
[๋ฐฑ์ค] 16985 Maaaaaaaaaze(ํ์ด์ฌ/python) (0) | 2023.08.16 |
[๋ฐฑ์ค] 14940 ์ฌ์ด ์ต๋จ๊ฑฐ๋ฆฌ(ํ์ด์ฌ/python) (0) | 2023.08.15 |
[๋ฐฑ์ค] 2194 ์ ๋ ์ด๋์ํค๊ธฐ (ํ์ด์ฌ/python) bfs (0) | 2023.08.14 |