728x90
https://www.acmicpc.net/problem/1717
전형적인 유니온 파인드 문제인데 recursion 에러로 애를 먹었다.
sys.setrecursion으로 해결하려했으나 못했고, 반복문으로 구현해서 통과했다.
import sys; input = sys.stdin.readline
def find(a, p):
if a == p[a]:
return a
# p[a] = find(a, p)
while a != p[a]:
a = p[a]
p[a] = p[p[a]]
return a
def union(a, b, p):
a = find(a, p)
b = find(b, p)
if a <= b:
p[b] = a
else:
p[a] = b
def main():
n, m = map(int, input().split())
answer = []
parent = [i for i in range(n + 1)]
for _ in range(m):
c, a, b = map(int, input().split())
if c: # answer(find)
if find(a, parent) == find(b, parent):
answer.append("YES")
else:
answer.append("NO")
else: # union & find
union(a, b, parent)
print("\n".join(answer))
if __name__ == "__main__":
main()
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 21317 징검다리 건너기 C++ (0) | 2022.02.19 |
---|---|
[백준] 9019 DSLR C++ (0) | 2022.02.18 |
[백준] 2239 스도쿠 python(pypy) (0) | 2022.02.16 |
[백준] 11779 최소비용 구하기 2 python (0) | 2022.02.15 |
[백준] 6087 레이저 통신 python (0) | 2022.02.14 |