fork download
  1. #include <bits/stdc++.h>
  2.  
  3. #define N int(2e5)
  4.  
  5. using namespace std;
  6.  
  7. int n,c[N+2],kq[N+2];
  8.  
  9. vector<int>adj[N+2];
  10.  
  11. set<int>luu[N+2];
  12.  
  13. void dfs(int u,int parent)
  14.  
  15. {
  16.  
  17. luu[u].insert(c[u]);
  18.  
  19. for(int i=0;i<adj[u].size();i++)
  20.  
  21. {
  22.  
  23. int v=adj[u][i];
  24. if(v==parent)
  25. continue;
  26. dfs(v,u);
  27. if(luu[u].size()<luu[v].size())
  28. swap(luu[u],luu[v]);
  29. for(int val:luu[v])
  30. luu[u].insert(val);
  31. luu[v].clear();
  32. }
  33. kq[u]=luu[u].size();
  34. }
  35. int main()
  36. {
  37. cin>>n;
  38. for(int i=1;i<=n;i++)
  39. cin>>c[i];
  40. for(int i=1;i<n;i++)
  41. {
  42. int a,b;
  43. cin>>a>>b;
  44. adj[a].push_back(b);
  45. adj[b].push_back(a);
  46. }
  47. dfs(1,0);
  48. for(int i=1;i<=n;i++)
  49. cout<<kq[i]<<" ";
  50. return 0;
  51. }
Success #stdin #stdout 0.01s 19120KB
stdin
Standard input is empty
stdout
Standard output is empty