ke_timofeeva7

разрезание графчика (кастрация)

Mar 26th, 2021
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.62 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <sstream>
  4. #include <cmath>
  5. #include <algorithm>
  6. #include <memory.h>
  7. #include <stdio.h>
  8. #include <vector>
  9. #include <stack>
  10. #include <deque>
  11. #include <queue>
  12. #include <vector>
  13. #include <set>
  14. #include <iterator>
  15. #include <map>
  16. #include <iomanip>
  17. #define int long long
  18. #define fir first
  19. #define sec second
  20. #define pb push_back
  21. #define double long double
  22. #define endl "\n"
  23. #define un unsigned
  24. #define INF 1000000000
  25. using namespace std;
  26.  
  27. vector <int> p(1000005); // dsu
  28. int mas[3][1000005];
  29. int res[1000005];
  30.  
  31. int repr(int n)
  32. {
  33.     if (n == p[n]) return n;
  34.  
  35.     return p[n] = repr(p[n]);
  36. }
  37.  
  38. int Union(int x, int y)
  39. {
  40.     int x1 = repr(x), y1 = repr(y);
  41.  
  42.     p[x1] = y1;
  43.  
  44.     return (x1 == y1);
  45.  
  46. }
  47.  
  48. signed main()
  49. {
  50.     ios_base::sync_with_stdio();
  51.     cin.tie(0);
  52.     cout.tie(0);
  53.  
  54.     int n, m, q;
  55.     cin >> n >> m >> q;
  56.  
  57.     vector <vector<int>> gr(100000);
  58.  
  59.     for (int i = 0; i < m; i++)
  60.     {
  61.         int a, b;
  62.         cin >> a >> b;
  63.  
  64.         gr[a].pb(b);
  65.         gr[b].pb(a);
  66.     }
  67.  
  68.     for (int i = 0; i < q; i++)
  69.     {
  70.         string s;
  71.         cin >> s;
  72.  
  73.         int a, b;
  74.         cin >> mas[1][i] >> mas[2][i];
  75.        
  76.         if (s == "ask")
  77.             mas[0][i] = 1;
  78.         else
  79.             mas[0][i] = 0;     
  80.     }
  81.  
  82.     for (int i = 1; i <= n; i++)
  83.     {
  84.         p[i] = i;
  85.     }
  86.  
  87.     for (int i = q - 1; i >= 0; i--)
  88.     {
  89.         if (mas[0][i] == 1)
  90.         {
  91.             res[i] = (repr(mas[1][i]) == repr(mas[2][i]));
  92.         }
  93.         else
  94.         {
  95.             Union(mas[1][i], mas[2][i]);
  96.         }
  97.     }
  98.  
  99.     for (int i = 0; i < q; i++)
  100.     {
  101.         if (mas[0][i] == 1)
  102.         {
  103.             if (res[i] == 1)
  104.             {
  105.                 cout << "YES" << endl;
  106.             }
  107.             else
  108.             {
  109.                 cout << "NO" << endl;
  110.             }
  111.         }
  112.  
  113.     }
  114.  
  115.     return 0;
  116.  
  117. }
Advertisement
Add Comment
Please, Sign In to add comment