Advertisement
Guest User

Untitled

a guest
Mar 30th, 2020
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  1. import java.io.*;
  2. import java.util.*;
  3. public class Main{
  4. static int N, E;
  5. static ArrayList< LinkedList<Integer> > gr = new ArrayList<>();
  6. static ArrayList< LinkedList<Integer> > REgr = new ArrayList<>();
  7. static boolean[] visit;
  8. static Stack<Integer> st = new Stack<>();
  9. static int[][] comp;
  10. static int curComp = 0;
  11. static int numNodes = 0;
  12. public static void dfs1(int u){
  13. visit[u] = true;
  14. LinkedList<Integer> kids = gr.get(u);
  15. for( int kid : kids){
  16. if( !visit[kid] ){
  17. visit[kid] = true;
  18. dfs1(kid);
  19. }
  20. }
  21. st.add(u);
  22. }
  23.  
  24. public static void dfs2(int u){
  25. visit[u] = true;
  26. comp[u][0] = curComp;
  27. comp[u][1] = numNodes;
  28. numNodes++;
  29. LinkedList<Integer> kids = REgr.get(u);
  30. for( int kid : kids){
  31. if( !visit[kid] ){
  32. visit[kid] = true;
  33. dfs2(kid);
  34. }
  35. }
  36. }
  37.  
  38. public static void main(String[] args) throws Exception{
  39. BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  40. String[] re = br.readLine().split(" ");
  41. N = Integer.parseInt(re[0]);
  42. E = Integer.parseInt(re[1]);
  43. visit = new boolean[N+1];
  44. comp = new int[N+1][2];
  45.  
  46. for(int k=0; k<=N; k++){
  47. gr.add(k, new LinkedList<Integer>() );
  48. REgr.add(k, new LinkedList<Integer>() );
  49. visit[k] = false;
  50. }
  51. for(int k=0; k<E; k++){
  52. re = br.readLine().split(" ");
  53. int x = Integer.parseInt(re[0]);
  54. int y = Integer.parseInt(re[1]);
  55. gr.get(x).add(y);
  56. REgr.get(y).add(x);
  57. } //finish the graph.
  58.  
  59. br.close();
  60.  
  61. //run the first time dfs
  62. for(int k = 1; k<=N; k++){
  63. if(!visit[k] ){ dfs1(k);}
  64. }
  65. Arrays.fill(visit, false);
  66. curComp = 0;
  67. numNodes = 1;
  68.  
  69. while( !st.isEmpty() ){
  70. int u = st.pop();
  71.  
  72. if( !visit[u] ){
  73. dfs2(u);
  74. comp[u][1] = numNodes-1;
  75. curComp++;
  76. numNodes = 1;
  77. }
  78. }
  79.  
  80.  
  81. for(int k=1; k<=N; k++){
  82. if( comp[k][1] > 1 ){ System.out.print( 1 + " ");}
  83. else{ System.out.print(0 + " "); }
  84.  
  85. }
  86. }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement