bfs로 동맹 나누고 heap에 동맹 크기 큰 순서(최대힙)로 넣어서 K넘지안는선에서 동맹.
import sys
input = sys.stdin.readline
from collections import deque
from heapq import heappop,heappush
def bfs(i):
queue = deque()
queue.append(i)
check[i] = i
cnt = 1
while queue:
cur = queue.popleft()
for next in graph[cur]:
if not check[next]:
queue.append(next)
check[next] = i
cnt += 1
return cnt
N, M = map(int, input().split())
graph = {i: [] for i in range(1,N+1)}
for _ in range(M):
a, b = map(int, input().split())
graph[a] += [b]
graph[b] += [a]
check = {i:0 for i in range(1,N+1)}
count_set = []
C, H, K = map(int, input().split())
for i in range(1,N+1):
if not check[i]:
c = bfs(i)
heappush(count_set,(-c,i))
if check[C] == i:
init_power = c
power = init_power
while count_set and K > 0:
cur_union_cnt, king = heappop(count_set)
if check[king] != check[C] and check[king] != check[H]:
power -= cur_union_cnt
K -= 1
print(power)
'practivceAlgorithm > 백준' 카테고리의 다른 글
[백준][Python] 17829 222-폴링 (0) | 2021.08.26 |
---|---|
[백준][Python] 2435 기상청 인턴 신현수 (0) | 2021.08.26 |
[백준][Python] 13905 세부 (1) | 2021.08.25 |
[백준][Python] 2422 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 (0) | 2021.08.25 |
[백준][Python] 15824 너 봄에는 캡사이신이 맛있단다. (0) | 2021.08.24 |