Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <vector>
- #include <set>
- using namespace std;
- vector<int> G[1000001];
- set<int> s[1000001];
- int color[1000001], res[1000001];
- int root;
- void dfs(int v) {
- int to;
- s[v].insert(color[v]);
- for(int i = 0; i < G[v].size(); i++) {
- to = G[v][i];
- dfs(to);
- if(s[v].size() < s[to].size()) swap(s[v],s[to]);
- for(auto it:s[to]) {
- s[v].insert(it);
- }
- }
- res[v] = s[v].size();
- }
- int main() {
- //freopen("input.txt","r",stdin);
- int n,v;
- cin >>n;
- for(int i = 1; i < n + 1;i++) {
- cin >> v >> color [i];
- if(v != 0){G[v].push_back(i);
- }
- else {root = i;
- }
- }
- dfs(root);
- for(int i = 1; i < n + 1; i++){
- cout << res[i] << ' ';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement