Guest User

Untitled

a guest
Aug 16th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. package com.mehdi.main.codeforces.div_503;
  2.  
  3. import com.mehdi.lib.io.InputReader;
  4. import java.io.PrintWriter;
  5. import java.util.HashMap;
  6.  
  7. import static com.mehdi.lib.Factories.*;
  8.  
  9. public class VirtualFriends {
  10.  
  11. int[] parent;
  12. int[] rank;
  13. int[] comp;
  14. HashMap<String, Integer> map;
  15.  
  16. public void init(int size) {
  17. parent = new int[size];
  18. comp = new int[size];
  19. for (int i = 0; i < size; i++) {
  20. parent[i] = i;
  21. comp[i] = 1;
  22. }
  23. rank = new int[size];
  24. map = new HashMap<>();
  25.  
  26. }
  27.  
  28. public int find(int x) {
  29. return x == parent[x] ? x : (parent[x] = find(parent[x]));
  30. }
  31.  
  32. public void merge(int a, int b) {
  33. a = find(a);
  34. b = find(b);
  35. if (a == b) {
  36. return;
  37. }
  38. if (rank[a] < rank[b]) {
  39. parent[a] = b;
  40. } else {
  41. parent[b] = a;
  42. if (rank[a] == rank[b]) {
  43. ++rank[a];
  44. }
  45. }
  46. }
  47.  
  48. private void merge(String a, String b) {
  49. int indA = map.get(a);
  50. int indB = map.get(b);
  51. merge(indA, indB);
  52. }
  53.  
  54. private int find(String a) {
  55. int indA = map.get(a);
  56. return find(indA);
  57. }
  58.  
  59. public void solve(int testNumber, InputReader in, PrintWriter out) {
  60. int n = in.nextInt();
  61. init(100010);
  62. int val = 0;
  63. for (int i = 0; i < n; i++) {
  64. String a = in.next();
  65. String b = in.next();
  66. if (!map.containsKey(a)) {
  67. map.put(a, val++);
  68. }
  69. if (!map.containsKey(b)) {
  70. map.put(b, val++);
  71. }
  72. int parentA = find(a);
  73. int parentB = find(b);
  74. if (parentA != parentB) {
  75. merge(a, b);
  76. int newParent = find(a);
  77. if(newParent != parentA) {
  78. comp[newParent] += comp[parentA];
  79. comp[parentA] = 0;
  80. }
  81. if(newParent != parentB) {
  82. comp[newParent] += comp[parentB];
  83. comp[parentB] = 0;
  84. }
  85. out.println(comp[newParent]);
  86. }else {
  87. out.println(comp[parentA]);
  88. }
  89. }
  90. }
  91. }
Add Comment
Please, Sign In to add comment