[BOJ][๐ก4][๋ฐฑ์ค#01717] ์งํฉ์ ํํ
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold IV
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
์ด๊ธฐ์ {0}, {1}, {2}, โฆ {n} ์ด ๊ฐ๊ฐ n+1๊ฐ์ ์งํฉ์ ์ด๋ฃจ๊ณ ์๋ค. ์ฌ๊ธฐ์ ํฉ์งํฉ ์ฐ์ฐ๊ณผ, ๋ ์์๊ฐ ๊ฐ์ ์งํฉ์ ํฌํจ๋์ด ์๋์ง๋ฅผ ํ์ธํ๋ ์ฐ์ฐ์ ์ํํ๋ ค๊ณ ํ๋ค. ์งํฉ์ ํํํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ n(1 โค n โค 1,000,000), m(1 โค m โค 100,000)์ด ์ฃผ์ด์ง๋ค. m์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ์ฐ์ฐ์ ๊ฐ์์ด๋ค. ๋ค์ m๊ฐ์ ์ค์๋ ๊ฐ๊ฐ์ ์ฐ์ฐ์ด ์ฃผ์ด์ง๋ค. ํฉ์งํฉ์ 0 a b์ ํํ๋ก ์ ๋ ฅ์ด ์ฃผ์ด์ง๋ค. ์ด๋ a๊ฐ ํฌํจ๋์ด ์๋ ์งํฉ๊ณผ, b๊ฐ ํฌํจ๋์ด ์๋ ์งํฉ์ ํฉ์น๋ค๋ ์๋ฏธ์ด๋ค. ๋ ์์๊ฐ ๊ฐ์ ์งํฉ์ ํฌํจ๋์ด ์๋์ง๋ฅผ ํ์ธํ๋ ์ฐ์ฐ์ 1 a b์ ํํ๋ก ์ ๋ ฅ์ด ์ฃผ์ด์ง๋ค. ์ด๋ a์ b๊ฐ ๊ฐ์ ์งํฉ์ ํฌํจ๋์ด ์๋์ง๋ฅผ ํ์ธํ๋ ์ฐ์ฐ์ด๋ค. a์ b๋ n ์ดํ์ ์์ฐ์ ๋๋ 0์ด๋ฉฐ ๊ฐ์ ์๋ ์๋ค.
์ถ๋ ฅ
1๋ก ์์ํ๋ ์ ๋ ฅ์ ๋ํด์ ํ ์ค์ ํ๋์ฉ YES/NO๋ก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค. (yes/no ๋ฅผ ์ถ๋ ฅํด๋ ๋๋ค)
์์
์ ๋ ฅ
7 8
0 1 3
1 1 7
0 7 6
1 7 1
0 3 7
0 4 2
0 1 1
1 1 1
์ถ๋ ฅ
NO
NO
YES
My Sol
import sys
input = sys.stdin.readline
sys.setrecursionlimit(100000)
def find_set(x):
if x!=p[x]:
p[x] = find_set(p[x])
return p[x]
n, m = map(int, input().split())
p = [i for i in range(n+1)]
for _ in range(m):
f, u, v = map(int, input().split())
a, b = find_set(u), find_set(v)
if f:
print('YES' if a == b else 'NO')
continue
if a != b:
p[a] = b
์ ๋์จ ํ์ธ๋๋ฅผ ์ด์ฉํ์ฌ ํด๊ฒฐํ๋ ๋ฌธ์ ์๋ค. ํ ํ๋ฆฟ์ ์ฌ์ฉํ๊ณ ์ผ๋ถ ๋ณํํ๋๋ฐ ์ด๋ ต์ง ์๊ฒ ํ ์ ์์๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋ชจ๋ฒ๋ต์
# empty
๋๊ธ๋จ๊ธฐ๊ธฐ