Advertisement
MegaVerkruzo

Untitled

Oct 17th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.04 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cstdio>
  4. #include <unordered_set>
  5.  
  6. using namespace std;
  7.  
  8. unordered_set<int> dfs(int now, vector<vector<int>>& g, vector<int>& kr, vector<int>& r) {
  9. unordered_set<int> ans;
  10. for (auto next : g[now]) {
  11. unordered_set<int> buf = dfs(next, g, kr, r);
  12. if (buf.size() > ans.size()) {
  13. swap(buf, ans);
  14. }
  15. ans.insert(buf.begin(), buf.end());
  16. }
  17. ans.insert(kr[now]);
  18. r[now] = ans.size();
  19. return ans;
  20. }
  21.  
  22. int main() {
  23. freopen("input.txt", "r", stdin);
  24. int n;
  25. cin >> n;
  26. vector<int> kr(n + 1);
  27. vector<vector<int>> g(n + 1);
  28. int start;
  29. for (int i = 1; i <= n; ++i) {
  30. int p, u;
  31. cin >> p >> u;
  32. if (p != 0) {
  33. g[p].push_back(i);
  34. } else {
  35. start = i;
  36. }
  37. kr[i] = u;
  38. }
  39. vector<int> r(n + 1);
  40. unordered_set<int> ans = dfs(start, g, kr, r);
  41. for (int i = 1; i <= n; ++i) {
  42. cout << r[i] << " ";
  43. }
  44. return 0;
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement