Advertisement
Guest User

Untitled

a guest
May 25th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.86 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. #include <set>
  5.  
  6. using namespace std;
  7.  
  8. vector<int> G[1000001];
  9. set<int> s[1000001];
  10. int color[1000001], res[1000001];
  11. int root;
  12.  
  13.  
  14. void dfs(int v) {
  15. int to;
  16. s[v].insert(color[v]);
  17. for(int i = 0; i < G[v].size(); i++) {
  18. to = G[v][i];
  19. dfs(to);
  20. if(s[v].size() < s[to].size()) swap(s[v],s[to]);
  21.  
  22. for(auto it:s[to]) {
  23. s[v].insert(it);
  24. }
  25. }
  26. res[v] = s[v].size();
  27. }
  28.  
  29. int main() {
  30.  
  31. //freopen("input.txt","r",stdin);
  32.  
  33. int n,v;
  34. cin >>n;
  35. for(int i = 1; i < n + 1;i++) {
  36. cin >> v >> color [i];
  37. if(v != 0){G[v].push_back(i);
  38. }
  39. else {root = i;
  40. }
  41. }
  42.  
  43. dfs(root);
  44.  
  45. for(int i = 1; i < n + 1; i++){
  46. cout << res[i] << ' ';
  47. }
  48.  
  49. return 0;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement