Skip to content

Commit 754023f

Browse files
committed
[BOJ] 최종 순위 / 골드 1 / 60분
https://www.acmicpc.net/problem/3665
1 parent 5cefcd8 commit 754023f

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
from collections import deque
2+
import sys
3+
4+
t = int(sys.stdin.readline())
5+
6+
for i in range(t):
7+
n = int(sys.stdin.readline())
8+
9+
graph = [[] for _ in range(n + 1)]
10+
inDegree = [0 for _ in range(n + 1)]
11+
queue = deque()
12+
answer = []
13+
flag = 0
14+
15+
team = list(map(int, sys.stdin.readline().rstrip().split()))
16+
17+
for j in range(n - 1):
18+
for k in range(j + 1, n):
19+
graph[team[j]].append(team[k])
20+
inDegree[team[k]] += 1
21+
22+
m = int(sys.stdin.readline())
23+
for j in range(m):
24+
first, second = map(int, sys.stdin.readline().rstrip().split())
25+
flag = True
26+
27+
for k in graph[first]:
28+
if k == second:
29+
graph[first].remove(second)
30+
inDegree[second] -= 1
31+
graph[second].append(first)
32+
inDegree[first] += 1
33+
flag = False
34+
35+
if flag:
36+
graph[second].remove(first)
37+
inDegree[first] -= 1
38+
graph[first].append(second)
39+
inDegree[second] += 1
40+
41+
for j in range(1, n + 1):
42+
if inDegree[j] == 0:
43+
queue.append(j)
44+
45+
if not queue:
46+
print("IMPOSSIBLE")
47+
continue
48+
49+
result = True
50+
while queue:
51+
if len(queue) > 1:
52+
result = False
53+
break
54+
55+
tmp = queue.popleft()
56+
answer.append(tmp)
57+
for j in graph[tmp]:
58+
inDegree[j] -= 1
59+
if inDegree[j] == 0:
60+
queue.append(j)
61+
elif inDegree[j] < 0:
62+
result = False
63+
break
64+
65+
if not result or len(answer) < n:
66+
print("IMPOSSIBLE")
67+
else:
68+
print(*answer)

0 commit comments

Comments
 (0)