백준 3665 - 최종 순위 (Python)
Updated:
이번 문제는 두팀 끼리 순서가 바뀐다 해도 다른 팀끼리의 순서는 변하지 않기 때문에 모든 연결을 표현해야합니다.
전체 코드
import sys
from collections import deque
input = sys.stdin.readline
for _ in range(int(input())):
n = int(input())
t = list(map(int, input().split()))
counts = [0 for i in range(32001)]
graph = [[] for i in range(32001)]
q = deque()
for i in range(n - 1):
for j in range(i + 1, n):
graph[t[i]].append(t[j])
counts[t[j]] += 1
for __ in range(int(input())):
a, b = map(int, input().split())
if b in graph[a]:
graph[a].remove(b)
counts[b] -= 1
graph[b].append(a)
counts[a] += 1
continue
graph[b].remove(a)
counts[a] -= 1
graph[a].append(b)
counts[b] += 1
for i in range(1, n + 1):
if counts[i] == 0:
q.append(i)
answer = []
while q:
if len(q) > 1:
break
tmp = q.popleft()
answer.append(tmp)
for i in graph[tmp]:
counts[i] -= 1
if counts[i] == 0:
q.append(i)
elif counts[i] < 0:
break
if len(answer) < n:
print('IMPOSSIBLE')
else:
print(*answer)