Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.05 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <set>
  4.  
  5. using namespace std;
  6.  
  7. struct Node {
  8.     vector<Node *> childs, parents;
  9.     Node *maried;
  10.     char sex;
  11.     Node() : sex('?'), maried(nullptr) {}
  12. };
  13.  
  14. vector<Node> nodes;
  15.  
  16. int main() {
  17.     int n, m;
  18.     cin >> n >> m;
  19.     nodes.resize(n);
  20.  
  21.     for (int i = 0; i < m; i++) {
  22.         int t, a, b;
  23.  
  24.         cin >> t >> a >> b;
  25.  
  26.         a--;
  27.         b--;
  28.  
  29.         if (t == 1 || t == 2 || t == 3) {
  30.             nodes[b].childs.push_back(&nodes[a]);
  31.             if (nodes[b].maried != nullptr) {
  32.                 nodes[b].maried->childs.push_back(&nodes[a]);
  33.                 nodes[a].parents.push_back(nodes[b].maried);
  34.             }
  35.             nodes[a].parents.push_back(&nodes[b]);
  36.  
  37.             if (nodes[b].sex == '?') {
  38.                 if (t == 1) {
  39.                     nodes[b].sex = 'f';
  40.                     if (nodes[b].maried != nullptr) {
  41.                         nodes[b].maried->sex = 'm';
  42.                     }
  43.                 } else if (t == 2) {
  44.                     nodes[b].sex = 'm';
  45.                     if (nodes[b].maried != nullptr) {
  46.                         nodes[b].maried->sex = 'f';
  47.                     }
  48.                 }
  49.             }
  50.  
  51.             if (nodes[a].parents.size() > 1) {
  52.                 if (nodes[a].parents[0]->sex == 'm') {
  53.                     nodes[a].parents[1]->sex = 'f';
  54.                 } else if (nodes[a].parents[0]->sex == 'f') {
  55.                     nodes[a].parents[1]->sex = 'm';
  56.                 } else if (nodes[a].parents[1]->sex == 'm') {
  57.                     nodes[a].parents[0]->sex = 'f';
  58.                 } else if (nodes[a].parents[1]->sex == 'f') {
  59.                     nodes[a].parents[0]->sex = 'm';
  60.                 }
  61.             }
  62.         } else if (t == 4) {
  63.             nodes[a].maried = &nodes[b];
  64.             nodes[b].maried = &nodes[a];
  65.  
  66.             for (int j = 0; j < nodes[a].childs.size(); j++) {
  67.                 nodes[b].childs.push_back(nodes[a].childs[j]);
  68.             }
  69.  
  70.             for (int j = 0; j < nodes[b].childs.size(); j++) {
  71.                 nodes[a].childs.push_back(nodes[b].childs[j]);
  72.             }
  73.  
  74.             if (nodes[a].sex == 'm') {
  75.                 nodes[b].sex = 'f';
  76.             } else if (nodes[a].sex == 'f') {
  77.                 nodes[b].sex = 'm';
  78.             } else if (nodes[b].sex == 'm') {
  79.                 nodes[a].sex = 'f';
  80.             } else if (nodes[b].sex == 'f') {
  81.                 nodes[a].sex = 'm';
  82.             }
  83.         }
  84.     }
  85.  
  86.     for (int i = 0; i < nodes.size(); i++) {
  87.         cout << nodes[i].sex << ' ' << (nodes[i].childs.size() > 0 ? '+' : '-') << endl;
  88.     }
  89.  
  90.  
  91.     return 0;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement