Advertisement
Guest User

Untitled

a guest
Dec 17th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. const int maxn = static_cast<int>(1e5 + 10);
  4. int size[maxn], parent[maxn], real_ans[maxn];
  5.  
  6. int find_set (int v) {
  7. if (v == parent[v])
  8. return v;
  9. return parent[v] = find_set (parent[v]);
  10. }
  11.  
  12. void make_set (int v) {
  13. parent[v] = v;
  14. size[v] = 1;
  15. }
  16.  
  17. void union_sets (int a, int b) {
  18. a = find_set (a);
  19. b = find_set (b);
  20. if (a != b) {
  21. if (size[a] < size[b])
  22. std::swap (a, b);
  23. parent[b] = a;
  24. size[a] += size[b];
  25. }
  26. }
  27.  
  28. void solution() {
  29. int n, m;
  30. scanf("%d%d\n", &n, &m);
  31. for (int i = 1; i <= n; ++i) {
  32. make_set(i);
  33. real_ans[i] = i;
  34. }
  35. char str[100];
  36. std::vector<int> v;
  37. int cur;
  38. while (m--) {
  39. gets(str);
  40. std::stringstream ss;
  41. ss << str;
  42. v.clear();
  43. while (ss >> cur) {
  44. v.push_back(cur);
  45. }
  46. if (v.size() == 1) {
  47. printf("%d\n", real_ans[find_set(v.back())]);
  48. } else {
  49. //printf("hoba %d %d\n", v[0], v[1]);
  50. if (real_ans[find_set(v[1])] != v[1] || real_ans[find_set(v[0])] == v[1]) {
  51. printf("0\n");
  52. } else {
  53. union_sets(v[0], v[1]);
  54. //real_ans[find_set(v[0])] = v[0];
  55. printf("1\n");
  56. }
  57. }
  58. //for (int i = 1; i <= n; ++i) printf("%d ", real_ans[find_set(i)]);
  59. //printf("\n");
  60. }
  61. }
  62.  
  63. int main() {
  64. solution();
  65. return 0;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement