Advertisement
MegaVerkruzo

Untitled

Oct 30th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.22 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <unordered_map>
  5. #include <string>
  6. #include <ctime>
  7.  
  8. using namespace std;
  9.  
  10. vector<int> pred;
  11.  
  12. int get_up(int u) {
  13. if (u == pred[u]) {
  14. return u;
  15. }
  16. return pred[u] = get_up(pred[u]);
  17. }
  18.  
  19. void Union(int u, int v) {
  20. u = get_up(u);
  21. v = get_up(v);
  22. if (u == v) {
  23. return;
  24. }
  25. if (u > v) {
  26. pred[v] = u;
  27. } else {
  28. pred[u] = v;
  29. }
  30. }
  31.  
  32. bool check(int u, int v) {
  33. u = get_up(u);
  34. v = get_up(v);
  35. return u == v;
  36. }
  37.  
  38. int main() {
  39. unsigned int start = clock();
  40. vector<int> ansd;
  41. freopen("30", "r", stdin);
  42. int n, m, k;
  43. cin >> n >> m >> k;
  44. pred.resize(n + 1);
  45. for (int i = 1; i <= n; ++i) {
  46. pred[i].first = i;
  47. pred[i].second = 1;
  48. }
  49. vector<unordered_map<int, int>> g(n + 1);
  50. for (int i = 0; i < m; ++i) {
  51. int x, y;
  52. cin >> x >> y;
  53. g[x][y] = 1;
  54. g[y][x] = 1;
  55. }
  56. for (int i = 0; i < k; ++i) {
  57. int x, y;
  58. cin >> x >> y;
  59. Union(x, y);
  60. }
  61. vector<int> ans(n + 1, 0);
  62. for (int i = 1; i <= n; ++i) {
  63. vector<int> del;
  64. for (auto next : g[i]) {
  65. if (check(next.first, i)) {
  66. del.push_back(next.first);
  67. ans[i]++;
  68. }
  69. }
  70. for (int l = 0; l < del.size(); ++l) {
  71. g[i].erase(del[l]);
  72. }
  73. }
  74. int q;
  75. cin >> q;
  76. for (int i = 0; i < q; ++i) {
  77. char c;
  78. cin >> c;
  79. if (c == '?') {
  80. int x;
  81. cin >> x;
  82. ansd.push_back(ans[x]);
  83. } else {
  84. int x, y;
  85. cin >> x >> y;
  86. if (c == 'F') {
  87.  
  88. } else {
  89. if (!check(x, y)) {
  90. if (pred[x].second > pred[y].second) {
  91.  
  92. }
  93. Union(x, y);
  94. }
  95. }
  96. }
  97. }
  98. freopen("30.a", "r", stdin);
  99. for (int i = 0; i < ansd.size(); ++i) {
  100. int x;
  101. cin >> x;
  102. if (x != ansd[i]) {
  103. cout << "NO";
  104. }
  105. }
  106. cout << (clock() - start) / 1000.0;
  107. return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement