fork download
  1. import java.io.*;
  2. import java.util.*;
  3.  
  4. public class Main {
  5. public static void main(String[] args) throws IOException {
  6. StringBuilder sb = new StringBuilder();
  7.  
  8. st = new StringTokenizer(br.readLine());
  9. int N = Integer.parseInt(st.nextToken()); // 10000
  10. int M = Integer.parseInt(st.nextToken()); // 100000
  11.  
  12. List<List<Integer>> graph = new ArrayList<>();
  13. for (int i = 0; i <= N; i++) {
  14. graph.add(new ArrayList<>());
  15. }
  16.  
  17. for (int n = 0; n < M; n++) {
  18. st = new StringTokenizer(br.readLine());
  19. int A = Integer.parseInt(st.nextToken());
  20. int B = Integer.parseInt(st.nextToken());
  21. graph.get(B).add(A);
  22. }
  23.  
  24. int maxZombiePC = 0;
  25. for (int n = 1; n <= N; n++) {
  26. Queue<Integer> queue = new LinkedList<>();
  27. queue.add(n);
  28. boolean[] visited = new boolean[N+1];
  29. visited[n] = true;
  30.  
  31. int zombiePC = 0;
  32. while (!queue.isEmpty()) {
  33. int now = queue.poll();
  34.  
  35. for (int next :
  36. graph.get(now)) {
  37. if (visited[next]) {
  38. continue;
  39. }
  40. queue.add(next);
  41. visited[next] = true;
  42. zombiePC++;
  43. }
  44. }
  45. if (maxZombiePC > zombiePC)
  46. continue;
  47. else if (maxZombiePC == zombiePC)
  48. sb.append(n).append(" ");
  49. else {
  50. maxZombiePC = zombiePC;
  51. sb.delete(0, sb.length()).append(n).append(" ");
  52. }
  53. }
  54. System.out.println(sb);
  55. }
  56. }
  57.  
Success #stdin #stdout 0.07s 54988KB
stdin
5 4
3 1
3 2
4 3
5 3
stdout
1 2