백준 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)

Categories:

Updated: