Skip to content

Commit 4735867

Browse files
authored
[20251029] BOJ / G1 / 최종 순위 / 이준희
1 parent 3f16539 commit 4735867

File tree

1 file changed

+104
-0
lines changed

1 file changed

+104
-0
lines changed
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
```java
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
public static void main(String[] args) throws IOException {
7+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
8+
StringTokenizer st;
9+
10+
int T = Integer.parseInt(br.readLine().trim());
11+
StringBuilder sb = new StringBuilder();
12+
13+
for (int t = 0; t < T; t++) {
14+
int n = Integer.parseInt(br.readLine().trim());
15+
16+
st = new StringTokenizer(br.readLine());
17+
int[] lastYear = new int[n];
18+
for (int i = 0; i < n; i++) {
19+
lastYear[i] = Integer.parseInt(st.nextToken());
20+
}
21+
22+
boolean[][] graph = new boolean[n + 1][n + 1];
23+
int[] indegree = new int[n + 1];
24+
25+
for (int i = 0; i < n; i++) {
26+
for (int j = i + 1; j < n; j++) {
27+
int higher = lastYear[i];
28+
int lower = lastYear[j];
29+
if (!graph[higher][lower]) {
30+
graph[higher][lower] = true;
31+
indegree[lower]++;
32+
}
33+
}
34+
}
35+
36+
int m = Integer.parseInt(br.readLine().trim());
37+
for (int i = 0; i < m; i++) {
38+
st = new StringTokenizer(br.readLine());
39+
int a = Integer.parseInt(st.nextToken());
40+
int b = Integer.parseInt(st.nextToken());
41+
42+
if (graph[a][b]) {
43+
graph[a][b] = false;
44+
indegree[b]--;
45+
graph[b][a] = true;
46+
indegree[a]++;
47+
} else if (graph[b][a]) {
48+
graph[b][a] = false;
49+
indegree[a]--;
50+
graph[a][b] = true;
51+
indegree[b]++;
52+
} else {
53+
graph[a][b] = true;
54+
indegree[b]++;
55+
}
56+
}
57+
58+
Queue<Integer> q = new LinkedList<>();
59+
for (int i = 1; i <= n; i++) {
60+
if (indegree[i] == 0) {
61+
q.offer(i);
62+
}
63+
}
64+
65+
boolean ispossible = false;
66+
List<Integer> result = new ArrayList<>();
67+
68+
for (int cnt = 0; cnt < n; cnt++) {
69+
if (q.isEmpty()) {
70+
result = null;
71+
break;
72+
}
73+
if (q.size() > 1) {
74+
ispossible = true;
75+
}
76+
int cur = q.poll();
77+
result.add(cur);
78+
79+
for (int next = 1; next <= n; next++) {
80+
if (graph[cur][next]) {
81+
indegree[next]--;
82+
if (indegree[next] == 0) {
83+
q.offer(next);
84+
}
85+
}
86+
}
87+
}
88+
89+
if (result == null) {
90+
sb.append("IMPOSSIBLE\n");
91+
} else if (ispossible) {
92+
sb.append("?\n");
93+
} else {
94+
for (int x : result) {
95+
sb.append(x).append(" ");
96+
}
97+
sb.append("\n");
98+
}
99+
}
100+
101+
System.out.print(sb.toString());
102+
}
103+
}
104+
```

0 commit comments

Comments
 (0)