Advertisement
Nik_Perepelov

доп контест 2 задача Александру

Nov 17th, 2021
1,010
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.33 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4.  
  5. using namespace std;
  6. vector<int> weight;
  7. struct SNM {
  8.     vector<int> parent;
  9.     //vector<vector<int>> v_cats;
  10.  
  11.  
  12.     int get_parent(int vertex) {
  13.         if (parent[vertex] == vertex)
  14.             return vertex;
  15.         return parent[vertex] = get_parent(parent[vertex]);
  16.     }
  17.  
  18.     void join_sets(int m1, int m2) {
  19.         m1 = get_parent(m1);
  20.         m2 = get_parent(m2);
  21.         if (m1 != m2) {
  22.             if (weight[m1] < weight[m2]){
  23.                 int temporary = m1;
  24.                 m1 = m2;
  25.                 m2 = temporary;
  26.             }
  27.             //v_cats[m1].insert(v_cats[m1].end(), v_cats[m2].begin(), v_cats[m2].end());
  28.             parent[m2] = m1;
  29.             //v_cats[m2].clear();
  30.             weight[m1] += weight[m2];
  31.         }
  32.     }
  33.  
  34.     void create_set(int n) {
  35.         parent = vector<int>(n);
  36.         //v_cats = vector<vector<int>> (n);
  37.         weight = vector<int>(n, 1);
  38.         for (int i = 0; i < n; i++) {
  39.             //v_cats[i].push_back(i);
  40.             parent[i] = i;
  41.         }
  42.     }
  43. };
  44.  
  45.  
  46. int main() {
  47.     int n, m, k, a, b;
  48.     cin >> n >> m >> k;
  49.  
  50.     SNM snm;
  51.     snm.create_set(n);
  52.     vector<vector<int>> g(n);
  53.     vector<vector<int>> command(k, vector<int> (3));
  54.     for (int i = 0; i < m; i++){
  55.         cin >> a >> b;
  56.         g[a - 1].push_back(b - 1);
  57.     }
  58.  
  59.     for (int i = 0; i < k; i++){
  60.         string inp;
  61.         cin >> inp >> a >> b;
  62.         if (inp == "ask"){
  63.             command[k - 1 - i][0] = 1;
  64.             command[k - 1 - i][1] = a - 1;
  65.             command[k - 1 - i][2] = b - 1;
  66.         } else {
  67.  
  68.             command[k - 1 - i][0] = 2;
  69.             command[k - 1 - i][1] = a - 1;
  70.             command[k - 1 - i][2] = b - 1;
  71.         }
  72.     }
  73.  
  74.     vector<int> answer;
  75.     for (int i = 0; i < k; i++){
  76.         if (command[i][0] == 1){
  77.             if (snm.get_parent(command[i][1]) == snm.get_parent(command[i][2]))
  78.                 answer.push_back(1);
  79.             else{
  80.                 answer.push_back(0);
  81.             }
  82.         } else {
  83.             snm.join_sets(command[i][1], command[i][2]);
  84.         }
  85.     }
  86.  
  87.     for (int i = 0; i < answer.size(); i++){
  88.         if(answer[answer.size() - 1 - i] == 1)
  89.             cout << "YES" << endl;
  90.         else
  91.             cout << "NO" << endl;
  92.     }
  93.  
  94.     return 0;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement