Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <cstdio>
- #include <unordered_set>
- using namespace std;
- unordered_set<int> dfs(int now, vector<vector<int>>& g, vector<int>& kr, vector<int>& r) {
- unordered_set<int> ans;
- for (auto next : g[now]) {
- unordered_set<int> buf = dfs(next, g, kr, r);
- if (buf.size() > ans.size()) {
- swap(buf, ans);
- }
- ans.insert(buf.begin(), buf.end());
- }
- ans.insert(kr[now]);
- r[now] = ans.size();
- return ans;
- }
- int main() {
- freopen("input.txt", "r", stdin);
- int n;
- cin >> n;
- vector<int> kr(n + 1);
- vector<vector<int>> g(n + 1);
- int start;
- for (int i = 1; i <= n; ++i) {
- int p, u;
- cin >> p >> u;
- if (p != 0) {
- g[p].push_back(i);
- } else {
- start = i;
- }
- kr[i] = u;
- }
- vector<int> r(n + 1);
- unordered_set<int> ans = dfs(start, g, kr, r);
- for (int i = 1; i <= n; ++i) {
- cout << r[i] << " ";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement