간단한 위상 정렬 문제이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class BOJ2623 {
static int N;
static int M;
static List<List<Integer>> graph;
static int[] inDegree;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
graph = new ArrayList<>();
inDegree = new int[N + 1];
for(int i = 0; i <= N; i++){
graph.add(new ArrayList<>());
}
for(int i = 0; i < M; i++){
st = new StringTokenizer(br.readLine());
int length = Integer.parseInt(st.nextToken());
int prev = Integer.parseInt(st.nextToken());
int curr;
for(int j = 0; j < length - 1; j++){
curr = Integer.parseInt(st.nextToken());
graph.get(prev).add(curr);
inDegree[curr]++;
prev = curr;
}
}
Queue<Integer> q = new LinkedList<>();
for(int i = 1; i <= N; i++){
if(inDegree[i] == 0){
q.add(i);
}
}
StringBuilder sb = new StringBuilder();
int compare = 0;
while(!q.isEmpty()){
Integer singer = q.poll();
sb.append(singer + "\n");
compare++;
for(Integer i : graph.get(singer)){
inDegree[i]--;
if(inDegree[i] == 0){
q.add(i);
}
}
}
if(compare == N)
System.out.println(sb);
else
System.out.println(0);
}
}
'PS > 백준' 카테고리의 다른 글
[백준] 중량제한 - Java 1939 (0) | 2024.05.11 |
---|---|
[백준] 합이 0인 네 정수 - Java 7453 (0) | 2024.05.09 |
[백준] 상어 초등학교 - Java 21608 (0) | 2024.04.10 |
[백준] 해킹 - 28283 Java (0) | 2024.04.08 |
[백준] ATM - 11399 Java (0) | 2024.04.08 |