Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.15 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <bitset>
  4. #include <algorithm>
  5. #include <queue>
  6. #include <stack>
  7. #include <set>
  8. #include <math.h>
  9. #include <cstring>
  10. #include <sstream>
  11.  
  12. std::vector<int> mt;
  13. std::vector<bool> used;
  14.  
  15. int main(){
  16.  
  17.     std::ios_base::sync_with_stdio(false);
  18.     std::cin.tie(0); std::cout.tie(0);
  19.  
  20.     int n, m;
  21.     std::cin >> m >> n;
  22.  
  23.     std::vector<std::vector<int>> g = std::vector<std::vector<int>>(m);
  24.  
  25.     for(int i =0; i < m; i++) {
  26.         int v_num;
  27.         std::cin >> v_num;
  28.         for(int j=0; j < v_num; j++) {
  29.             int v;
  30.             std::cin >> v;
  31.             g[i].push_back(v-1);
  32.  
  33.         }
  34.     }
  35.  
  36.     //matching i from L to mt[i] from R
  37.     mt.assign(m,-1);
  38.     for(int i=0; i < m; i++) {
  39.         int v;
  40.         std::cin >> v;
  41.         mt[i] = v-1;
  42.     }
  43.  
  44.     std::vector<bool>free = std::vector<bool>(m,true);
  45.  
  46.     for (int i=0; i < m; i++) {
  47.         if (mt[i] != -1) {
  48.             free[i] = false;
  49.         }
  50.     }
  51.  
  52.     //2nd half is L 1st is R
  53.  
  54.     std::vector<std::vector<int>> g2 = std::vector<std::vector<int>>(n+m);
  55.  
  56.     for(int i = 0; i < m; i++) {
  57.         for(auto u : g[i]) {
  58.             if(mt[i] == u) {
  59.                 g2[u+m].push_back(i);
  60.             }
  61.             else {
  62.                 g2[i].push_back(u+m);
  63.             }
  64.         }
  65.     }
  66.  
  67.  
  68.     std::vector<bool>used2 = std::vector<bool>(n+m,false);
  69.  
  70.     for(int i = 0; i < m; i++) {
  71.         if(free[i] && !used2[i]) {
  72.             dfs(i,g2,used2);
  73.         }
  74.     }
  75.  
  76.     std::vector<int> l_minus;
  77.     std::vector<int> r_plus;
  78.  
  79.     for(int i=0; i< m; i++) {
  80.         if(!used2[i]) l_minus.push_back(i);
  81.     }
  82.  
  83.     for(int i=m; i< m+n; i++) {
  84.         if(used2[i]) r_plus.push_back(i-m);
  85.     }
  86.  
  87.     std::cout << l_minus.size() + r_plus.size();
  88.  
  89.     std::sort(l_minus.begin(),l_minus.end());
  90.     std::sort(r_plus.begin(),r_plus.end());
  91.  
  92.     std::cout << "\n" << l_minus.size() << " ";
  93.  
  94.     for(auto v: l_minus) {
  95.         std::cout << v+1 << " ";
  96.     }
  97.  
  98.     std::cout <<"\n" <<r_plus.size() << " ";
  99.  
  100.     for(auto v: r_plus) {
  101.         std::cout << v+1 << " ";
  102.     }
  103.  
  104.  
  105.  
  106.  
  107.     return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement