Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.21 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #pragma comment(linker, "/STACK:1000000000")
  4. #define int long long
  5. #define mp make_pair
  6. #define pb push_back
  7. using namespace std;
  8. vector<vector<int> > g;
  9. vector<int> color;
  10. vector<int> res;
  11. //vector<int> used;
  12.  
  13. set<int> dfs(int start) {
  14. int to;
  15. //used[start] = 1;
  16. set<int> s1, s2;
  17. s1.insert(color[start]);
  18. for (int i = 0; i < g[start].size(); i++) {
  19. to = g[start][i];
  20. //if (!used[to]) {
  21. s2 = dfs(to);
  22. if (s1.size() < s2.size())
  23. s1.swap(s2);
  24. s1.insert(s2.begin(), s2.end());
  25. s2.clear();
  26. //}
  27. }
  28. res[start] = s1.size();
  29. return s1;
  30. }
  31.  
  32. signed main() {
  33. ios_base::sync_with_stdio(0);
  34. cin.tie(0);
  35. int n;
  36. cin >> n;
  37. g = vector<vector<int> >(n);
  38. color = vector<int>(n);
  39. res = vector<int>(n);
  40. //used = vector<int>(n);
  41.  
  42. int u, v;
  43. int root = -1;
  44. for (int i = 0; i < n; ++i) {
  45. cin >> u >> v;
  46. u--;
  47. color[i] = v;
  48. if (u == -1) {
  49. root = i;
  50. continue;
  51. }
  52. g[u].pb(i);
  53. }
  54. dfs(root);
  55. for (auto i : res) {
  56. cout << i << ' ';
  57. }
  58. return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement