Advertisement
Guest User

Untitled

a guest
Dec 14th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.90 KB | None | 0 0
  1. #include <iostream>
  2. #include <map>
  3. #include <set>
  4. #include <algorithm>
  5. #include <math.h>
  6. #include <vector>
  7. #include <iterator>
  8. #include <string>
  9. #include <queue>
  10. #include <deque>
  11. #include <iomanip>
  12. #include <set>
  13. #include <cstdio>
  14.  
  15. using namespace std;
  16.  
  17. const int MAXN = 1e6 + 10;
  18.  
  19. int color[MAXN], res[MAXN];
  20. set<int> s[MAXN];
  21. vector<vector<int> > graph;
  22. int n;
  23.  
  24. void dfs(int v)
  25. {
  26.     int i, to;
  27.     s[v].insert(color[v]);
  28.     for (i = 0; i < graph[v].size(); i++)
  29.     {
  30.         to = graph[v][i];
  31.         dfs(to);
  32.         if (s[v].size() < s[to].size())
  33.             s[v].swap(s[to]);
  34.         s[v].insert(s[to].begin(), s[to].end());
  35.         s[to].clear();
  36.     }
  37.     res[v] = s[v].size();
  38. }
  39. int main()
  40. {
  41.     cin >> n;
  42.     graph.resize(n + 1);
  43.  
  44.     for (int i = 1, p, c; i <= n; i++)
  45.     {
  46.         cin >> p >> c;
  47.         graph[p].push_back(i);
  48.         color[i] = c;
  49.     }
  50.     dfs(0);
  51.  
  52.     for (int i = 1; i <= n; i++)
  53.         cout << res[i] << " ";
  54.  
  55.  
  56.     return 0;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement