File tree Expand file tree Collapse file tree 1 file changed +68
-0
lines changed
Expand file tree Collapse file tree 1 file changed +68
-0
lines changed Original file line number Diff line number Diff line change 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 )
You can’t perform that action at this time.
0 commit comments