fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4. #define fi first
  5. #define se second
  6. #define siz(x) (int)(x.size())
  7. #define all(x) x.begin(), x.end()
  8. #define debug_arr(x,len) for(int _=1; _<=len; _++) cout<<x[_]<<" "; cout<<'\n';
  9. #define debug(x) cout<<'\n'<<#x<<": "<<x<<'\n';
  10. const int maxN = 2e5+5;
  11.  
  12. int n, a[maxN], ans[maxN];
  13. vector<int>adj[maxN];
  14. set<int>s[maxN];
  15.  
  16. void dfs(int u, int v)
  17. {
  18. for(auto i: adj[u])
  19. {
  20. if(i == v) continue;
  21. dfs(i, u);
  22. if(siz(s[i]) > siz(s[u])) swap(s[i], s[u]);
  23. for(auto j: s[i]) s[u].insert(j);
  24. }
  25. ans[u] = siz(s[u]);
  26. }
  27.  
  28. void solve()
  29. {
  30.  
  31. }
  32.  
  33. int32_t main()
  34. {
  35. ios_base::sync_with_stdio(0); cin.tie(0);
  36. cin>>n;
  37. for(int i=1; i<=n; i+=1) cin>>a[i];
  38. for(int i=1; i<n; i+=1)
  39. {
  40. int x,y; cin>>x>>y;
  41. adj[x].push_back(y);
  42. adj[y].push_back(x);
  43. }
  44. for(int i=1; i<=n; i+=1) s[i].insert(a[i]);
  45. dfs(1, 0);
  46. for(int i=1; i<=n; i+=1) cout<<ans[i]<<" ";
  47. }
Success #stdin #stdout 0.01s 17752KB
stdin
Standard input is empty
stdout
Standard output is empty