코드
package test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Q47p265 {
static BufferedReader buf;
static BufferedWriter bw;
static StringTokenizer st;
static ArrayList<Integer> [] list;
static int []ans;
static boolean []visited;
public static void BFS(int index) {
Queue<Integer> qu =new LinkedList<Integer>();
qu.add(index);
visited[index]=true;
while(!qu.isEmpty()) {
int node = qu.poll();
for(int i : list[node]) {
if(visited[i] == false ) {
visited[i] = true;
++ans[i];
qu.add(i);
}
}
}
}
public static void main(String[] args) throws IOException, NumberFormatException {
// TODO Auto-generated method stub
buf=new BufferedReader(new InputStreamReader(System.in));
bw =new BufferedWriter(new OutputStreamWriter(System.out));
st=new StringTokenizer(buf.readLine());
int nodes=Integer.parseInt(st.nextToken());
int edges =Integer.parseInt(st.nextToken());
list = new ArrayList[nodes+1];
ans = new int[nodes+1];
for(int i=1;i<=nodes;i++) {
list[i]=new ArrayList<>();
}
for(int i =1; i<=edges;i++) {
st =new StringTokenizer(buf.readLine());
int x= Integer.parseInt(st.nextToken());
int y= Integer.parseInt(st.nextToken());
list[x].add(y);
}
for(int i=1; i<=nodes;i++) {
visited = new boolean[nodes+1];
BFS(i);
}
int max=0;
for(int i=1;i<=nodes;i++) {
max = ans[i] > max ? ans[i] : max;
}
for(int i=1;i<=nodes;i++) {
if(ans[i]==max) {
bw.write(i+" ");
}
}
bw.flush();
}
}