Advertisement
Guest User

Untitled

a guest
Nov 16th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.08 KB | None | 0 0
  1. //#pragma GCC optimize("Ofast")
  2. #include <iostream>
  3. #include <set>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. set<int> **s;
  9. int *ans;
  10. vector<vector<int>> t;
  11.  
  12.  
  13. void dfs(int v) {
  14.     for(int k : t[v]) {
  15.         dfs(k);
  16.         if(s[v] -> size() > s[k] -> size()) {
  17.             for(int i : *s[k]) {
  18.                 s[v] -> insert(i);
  19.             }
  20.             delete s[k];
  21.         } else {
  22.             for(int i : *s[v]) {
  23.                 s[k] -> insert(i);
  24.             }
  25.             delete s[v];
  26.             s[v] = s[k];
  27.         }
  28.     }
  29.     ans[v] = s[v] -> size();
  30. }
  31.  
  32. int main() {
  33.     int n;
  34.     cin >> n;
  35.     s = new set<int>*[n];
  36.     ans = new int[n];
  37.     t.resize(n);
  38.     int p, c, root;
  39.     for (int i = 0; i < n; i++) {
  40.         cin >> p >> c;
  41.         s[i] = new set<int>;
  42.         s[i] -> insert(c);
  43.         if (p != 0) {
  44.             t[p - 1].push_back(i);
  45.         } else {
  46.             root = i;
  47.         }
  48.     }
  49.     dfs(root);
  50.     delete s[root];
  51.     for (int i = 0; i < n; i++) {
  52.         cout << ans[i] << " ";
  53.     }
  54.     cout << endl;
  55.     return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement