๊ณผ๋ชฉ๋ค์ ์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ํด๋น ๊ทธ๋ฆผ์์ ์ ์ ๊ณผ๋ชฉ์ ํ๋์ ์ผ๋ก ํ์๋๋ค. ์ ์ ๊ณผ๋ชฉ์ด ์๋ ๊ฒฝ์ฐ 1ํ๊ธฐ์ ๋ฐ๋ก ๋ค์ ์ ์๊ณ ํด๋นํ๋ ๊ณผ๋ชฉ๋ค์ 1, 4, 6์ด ๋๋ค.
1ํ๊ธฐ์ ๋ค์ ๊ณผ๋ชฉ์ ์ ์ธํ๋ฉด ๋จ์ ๊ณผ๋ชฉ์ ์์ ๊ฐ๋ค. 5๋ฅผ ๋ฃ๊ธฐ ์ํด์๋ 2๋ฅผ ๋จผ์ ๋ค์ด์ผ ํ๋ค. 2ํ๊ธฐ์ ๋ค์ ์ ์๋ ๊ณผ๋ชฉ์ 2, 3์ด ๋๋ค.
2, 3์ ์๊ฐํ๋ฉด ๋จ์ ๊ณผ๋ชฉ์ 5๊ฐ ๋๋ค. 3ํ๊ธฐ์๋ 5๋ฅผ ์๊ฐํ๋ฉด ๋๋ค.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int M = sc.nextInt();
int[] terms = new int[N+1];
int[] prerequisite = new int[N+1];
Map<Integer, List<Integer>> subjects = new HashMap<>();
for (int i = 0; i < M; i++) {
int A = sc.nextInt();
int B = sc.nextInt();
if (!subjects.containsKey(A)) {
subjects.put(A, new ArrayList<>());
}
subjects.get(A).add(B);
prerequisite[B]++;
}
Queue<int[]> queue = new LinkedList<>();
for (int i = 1; i < N+1; i++) {
if (prerequisite[i] == 0) {
queue.add(new int[]{i, 0});
}
}
while (!queue.isEmpty()) {
int[] subInfo = queue.poll();
int subNum = subInfo[0];
int term = ++subInfo[1];
terms[subNum] = term;
if (subjects.getOrDefault(subNum, null) != null) {
for (int nextSubNum : subjects.get(subNum)) {
prerequisite[nextSubNum]--;
if (prerequisite[nextSubNum] == 0) {
queue.add(new int[]{nextSubNum, term});
}
}
}
}
StringBuilder sb = new StringBuilder();
for (int i = 1; i < N+1; i++) {
sb.append(terms[i] + " ");
}
System.out.println(sb);
}
}