Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <map>
- #include <set>
- #include <algorithm>
- #include <math.h>
- #include <vector>
- #include <iterator>
- #include <string>
- #include <queue>
- #include <deque>
- #include <iomanip>
- #include <set>
- #include <cstdio>
- using namespace std;
- const int MAXN = 1e6 + 10;
- int color[MAXN], res[MAXN];
- set<int> s[MAXN];
- vector<vector<int> > graph;
- int n;
- void dfs(int v)
- {
- int i, to;
- s[v].insert(color[v]);
- for (i = 0; i < graph[v].size(); i++)
- {
- to = graph[v][i];
- dfs(to);
- if (s[v].size() < s[to].size())
- s[v].swap(s[to]);
- s[v].insert(s[to].begin(), s[to].end());
- s[to].clear();
- }
- res[v] = s[v].size();
- }
- int main()
- {
- cin >> n;
- graph.resize(n + 1);
- for (int i = 1, p, c; i <= n; i++)
- {
- cin >> p >> c;
- graph[p].push_back(i);
- color[i] = c;
- }
- dfs(0);
- for (int i = 1; i <= n; i++)
- cout << res[i] << " ";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement