โ๋ฌธ์
https://www.acmicpc.net/problem/1717
๋ฉ๋ชจ๋ฆฌ: 77876 KB, ์๊ฐ: 284 ms
์๋ฃ ๊ตฌ์กฐ, ๋ถ๋ฆฌ ์งํฉ
์ด๊ธฐ์ n+1n+1๊ฐ์ ์งํฉ {0},{1},{2},…,{n}{0},{1},{2},…,{n}์ด ์๋ค. ์ฌ๊ธฐ์ ํฉ์งํฉ ์ฐ์ฐ๊ณผ, ๋ ์์๊ฐ ๊ฐ์ ์งํฉ์ ํฌํจ๋์ด ์๋์ง๋ฅผ ํ์ธํ๋ ์ฐ์ฐ์ ์ํํ๋ ค๊ณ ํ๋ค.
์งํฉ์ ํํํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
โ๐ปํ์ด
https://yoongrammer.tistory.com/102
์๋ก์ ์งํฉ(Disjoint Set) & ์ ๋์จ ํ์ธ๋(Union find)
๋ชฉ์ฐจ์๋ก์ ์งํฉ(Disjoint Set) & ์ ๋์จ ํ์ธ๋(Union find)์๋ก์ ์งํฉ(Disjoint Set)Disjoint Set(์๋ก์ ์งํฉ, ๋ถ๋ฆฌ ์งํฉ)์ด๋ ์๋ก ๊ณตํต๋ ์์๋ฅผ ๊ฐ์ง๊ณ ์์ง ์์ ๋ ๊ฐ ์ด์์ ์งํฉ์ ๋งํฉ๋๋ค. Disjoint s
yoongrammer.tistory.com
์ ์ฌ์ดํธ๋ฅผ ์ฐธ๊ณ ํ์ฌ ๊ตฌํํ์ต๋๋ค.
๐ป์ฝ๋
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
n, m = map(int, input().split())
parent = [i for i in range(n + 1)]
def find(x):
if parent[x] != x:
parent[x] = find(parent[x])
return parent[x]
def union(a, b):
a, b = find(a), find(b)
if a > b:
parent[a] = b
else:
parent[b] = a
for _ in range(m):
c, a, b = map(int, input().split())
if c == 0:
union(a, b)
else:
print("NO" if find(a) != find(b) else "YES")
๐ํ๊ธฐ
์ต๋ ๊น์ด๊ฐ 1000์ด๋ผ์ ๊น์ด๋ฅผ ๋ฐ๊พธ์ง ์์ผ๋ฉด ์๋ฌ๊ฐ ๋๋ค. ๊ทธ๋ฐ๋ฐ PyPy3๋ ๊น์ด๋ฅผ ๋ฐ๊พธ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ฐ์ํด์ ๊ฒฐ๊ตญ Python3๋ก ํ๊ฒ ๋์๋ค. ์ผ์ฑ์ PyPy3๋ก ์ฑ์ ํ๋ ๋ฐ ๊ทธ๋ผ ์ด๋ฐ ๊ฒฝ์ฐ์๋ ์ด๋ป๊ฒ ํด์ผ ํ ๊น...
'Coding Test > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1197. ์ต์ ์คํจ๋ ํธ๋ฆฌ/Python - Gold4 (1) | 2025.08.16 |
---|---|
[๋ฐฑ์ค] 13549. ์จ๋ฐ๊ผญ์ง3/Python - Gold5 (0) | 2025.08.15 |
[๋ฐฑ์ค] 11657. ํ์๋จธ์ /Python - Gold4 (1) | 2025.08.14 |
[๋ฐฑ์ค] 9655. ๋ ๊ฒ์/Python - Silver5 (2) | 2025.08.11 |
[๋ฐฑ์ค] 2630. ์์ข ์ด ๋ง๋ค๊ธฐ/Python - Silver2 (0) | 2025.08.10 |