fork(1) download
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.*;
  5.  
  6. public class Main {
  7.  
  8. public static void main(String[] args) throws IOException {
  9. StringTokenizer tokenizer = new StringTokenizer(in.readLine());
  10. int n = Integer.parseInt(tokenizer.nextToken());
  11. int k = Integer.parseInt(tokenizer.nextToken());
  12. int[] cows = new int[n + 1];
  13. List<Integer>[] viewed = new List[n + 1];
  14. for (int j = 1; j <= n; j++) {
  15. cows[j] = j;
  16. viewed[j] = new ArrayList<>();
  17. viewed[j].add(j);
  18. }
  19. for (long t = 1; t <= k; t++) {
  20. tokenizer = new StringTokenizer(in.readLine());
  21. int a = Integer.parseInt(tokenizer.nextToken());
  22. int b = Integer.parseInt(tokenizer.nextToken());
  23. int c = cows[a];
  24. int d = cows[b];
  25. cows[a] = d;
  26. cows[b] = c;
  27. viewed[cows[a]].add(a);
  28. viewed[cows[b]].add(b);
  29. }
  30. for(int i=1;i<=n;i++)
  31. System.out.println("PHY "+cows[i]);
  32. int[] answer = new int[n + 1];
  33. for (int r = 1; r <= n; r++) {
  34. if (cows[r] != 0) {
  35. List<Integer> cycle = new ArrayList<>();
  36. int j = r;
  37. while (cows[j] != 0) {
  38. cycle.add(j);
  39. j = cows[j];
  40. cows[cycle.get(cycle.size() - 1)] = 0;
  41. }
  42. Set<Integer> viewedHere = new HashSet<>();
  43. for (int cow : cycle) {
  44. viewedHere.addAll(viewed[cow]);
  45. }
  46. for (int cow : cycle) {
  47. answer[cow] = viewedHere.size();
  48. }
  49. }
  50. }
  51. StringBuilder out = new StringBuilder();
  52. for (int j = 1; j <= n; j++) {
  53. out.append(answer[j]).append('\n');
  54. }
  55. System.out.print(out);
  56. }
  57. }
Success #stdin #stdout 0.08s 48300KB
stdin
5 4
1 3
1 2
2 3
2 4
stdout
PHY 2
PHY 4
PHY 3
PHY 1
PHY 5
4
4
3
4
1