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

๋ฌธ์ ํด์
- ํฉ์งํฉ๊ณผ ๊ฐ์ ์งํฉ์ธ์ง ํ์ธํ๋ ๋ฌธ์ ๋ก ๋ถ๋ฆฌ์งํฉ(Union-Find)์ ๋ํ์ ์ธ ๋ฌธ์ ์ด๋ค.
๊ตฌํ ๋ฐฉ๋ฒ
- ์ด 3๋จ๊ณ๋ก ๋๋์ด ๊ตฌํ
- Root๋ฅผ ์ ์ฅํ ๋ฐฐ์ด ์ด๊ธฐํ
- Find ํจ์ ์์ฑ
- ๊ฐ์ Root๋ฅผ ๊ฐ์ง๊ณ ์๋์ง ํ์ธ( ๊ฐ์ ์งํฉ์ธ๊ฐ ํ์ธ)
- Union ํจ์ ์์ฑ
- ์๋ก ๋ค๋ฅธ ๋ ์งํฉ์ ํฉ์งํฉ (Root ๋ฅผ ๊ฐ๊ฒ ํจ)
- ์ด๋ฏธ ๊ฐ์ผ๋ฉด ํ ํ์ ์์
์ฝ๋
# 1717 ์งํฉ์ ํํ
import sys
input = sys.stdin.readline
def find(num:int)->int:
if parent[num] == num:
return num
parent[num] = find(parent[num])
return parent[num]
def union(num1:int, num2:int) -> None:
x = find(num1)
y = find(num2)
if x != y:
parent[y] = x
return
def solution(n:int, m:int) -> None:
for _ in range(m):
order, a, b = map(int, input().split())
if order: # ๊ฐ์ ์งํฉ์ธ๊ฐ ํ์ธ
if find(a) == find(b):
print("yes")
else:
print("no")
else: # ํฉ์งํฉ
union(a, b)
return
if __name__ == "__main__":
# input
n, m = map(int, input().split())
parent = [i for i in range(n+1)]
solution(n, m)๋ฐ์ํ
'๐ STUDY > ์๋ฃ๊ตฌ์กฐ & ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 18111. ๋ง์ธํฌ๋ํํธ (1) | 2024.01.09 |
|---|---|
| [์๊ณ ๋ฆฌ์ฆ] Union-Find (1) | 2024.01.07 |
| 13994. ์๋ก์ด ๋ฒ์ค ๋ ธ์ (0) | 2023.03.06 |
| 4613. ๋ฌ์์ ๊ตญ๊ธฐ ๊ฐ์ ๊น๋ฐ (0) | 2023.03.06 |
| 1210. [S/W ๋ฌธ์ ํด๊ฒฐ ๊ธฐ๋ณธ] 2์ผ์ฐจ - Ladder1 (0) | 2023.03.06 |