array의 P들은 같은 gi에 동시에 존재 할 수 없고 교집합도 있을 수 없다.
되도록이면 gi에 도킹하는 것이 효율적이고 불가능하면 gi-1에 도킹하는 식으로 설계한다.
도킹을 완료하면 이전 트리와 union을 통해 통합된 tree로 도킹 가능한 G를 parent node로 관리한다.
import sys
input = sys.stdin.readline
G = int(input())
P = int(input())
parent = [i for i in range(G+1)]
def find(v):
if parent[v] == v:
return v
parent[v] = find(parent[v])
return parent[v]
def union(a, b):
a = find(a)
b = find(b)
parent[b] = a
arr = [int(input()) for _ in range(P)]
ans = 0
for v in arr:
p = find(v)
if p == 0:
break
ans += 1
union(p-1, p)
print(ans)
gi들을 매칭시키며 tree를 확장시키는데 최종적으로 find호출시 0이 나오게 된다면 이미 기존 트리에 속해있다는 것이다.
즉 상호배타가 깨짐에 따라 공항이 폐쇄된다.
'practivceAlgorithm > 백준' 카테고리의 다른 글
[백준][Python] 2529 부등호 (0) | 2021.07.16 |
---|---|
[백준][PYTHON] 15649 15650 N과 M (1),(2) (0) | 2021.07.14 |
[백준][Python] 13398 연속합 2 (0) | 2021.07.11 |
[백준][Python] 1717 : 집합의표현 (0) | 2021.07.10 |
백준 11005 진법변환 파이썬 (0) | 2021.06.29 |