Advertisement
DobriyKrot

Ксс

May 19th, 2023
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.82 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.Comparator;
  4. import java.util.Scanner;
  5.  
  6.  
  7. public class Main {
  8. static boolean[] used;
  9. static int[] c;
  10. static ArrayList<Integer>[] g;
  11. static ArrayList<Integer>[] g_rev;
  12. static ArrayList<Integer> topSort = new ArrayList<>();
  13.  
  14. public static void dfs1(int ver) {
  15. used[ver] = true;
  16. for (Integer j : g[ver]) {
  17. if (!used[j]) {
  18. dfs1(j);
  19. }
  20. }
  21. topSort.add(ver);
  22. }
  23.  
  24. public static void dfs2(int ver, int color) {
  25. c[ver] = color;
  26. for (Integer j : g_rev[ver]) {
  27. if (c[j] == 0) {
  28. dfs2(j, color);
  29. }
  30. }
  31. }
  32.  
  33. public static void main(String[] args) {
  34. Scanner in = new Scanner(System.in);
  35. int n = in.nextInt();
  36. used = new boolean[n];
  37. c = new int[n];
  38. g = new ArrayList[n];
  39. g_rev = new ArrayList[n];
  40. for (int i = 0; i < n; ++i) {
  41. g[i] = new ArrayList<>();
  42. g_rev[i] = new ArrayList<>();
  43. }
  44. int m = in.nextInt();
  45. for (int i = 0; i < m; ++i) {
  46. int u = in.nextInt();
  47. int v = in.nextInt();
  48. --u;
  49. --v;
  50. g[u].add(v);
  51. g_rev[v].add(u);
  52. }
  53. for (int i = 0; i < n; ++i) {
  54. if (!used[i]) {
  55. dfs1(i);
  56. }
  57. }
  58. Collections.reverse(topSort);
  59. int color = 1;
  60. for (int i = 0; i < n; ++i) {
  61. if (c[topSort.get(i)] == 0) {
  62. dfs2(topSort.get(i), color++);
  63. }
  64. }
  65. System.out.println(color - 1);
  66. for (int i = 0; i < n; ++i) {
  67. System.out.print(c[i] + " ");
  68. }
  69. }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement