Guest User

a.cpp

a guest
Feb 28th, 2026
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.09 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define f first
  3. #define s second
  4. #define ll long long
  5. #define pb push_back
  6. #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
  7. #define mk make_pair
  8. using namespace std;
  9.  
  10. const int MAXN = 2e5 + 5;
  11. const ll INF = 1e18 + 7;
  12.  
  13. vector <int> g[MAXN];
  14. bool was[MAXN];
  15. ll dp[MAXN];
  16. int num[MAXN], cntMa, cnt[MAXN], col[MAXN];
  17. map <int, int> ma[MAXN];
  18.  
  19.  
  20. void dfs(int x, int pr = -1){
  21.     was[x] = 1;
  22.     int mainMa = 0;
  23.     dp[x] = 0;
  24.     cnt[x] = 0;
  25.     for (int i = 0; i < g[x].size(); i++){
  26.         if (!was[g[x][i]]){
  27.             dfs(g[x][i], x);
  28.             if (ma[num[g[x][i]]].size() > ma[mainMa].size()){
  29.                 mainMa = num[g[x][i]];
  30.                 dp[x] = dp[g[x][i]];
  31.                 cnt[x] = cnt[g[x][i]];
  32.             }
  33.         }
  34.     }
  35.  
  36.     if (mainMa == 0){
  37.         cntMa++;
  38.         mainMa = cntMa;
  39.     }
  40.     num[x] = mainMa;
  41.     for (int i = 0; i < g[x].size(); i++){
  42.         if (g[x][i] != pr){
  43.             if (num[g[x][i]] != mainMa){
  44.                 for (auto [key, val] : ma[num[g[x][i]]]){
  45.                     ma[mainMa][key] += val;
  46.                     if (ma[mainMa][key] == cnt[x]){
  47.                         dp[x] += key;
  48.                     }
  49.                     else if (ma[mainMa][key] > cnt[x]){
  50.                         dp[x] = key;
  51.                         cnt[x] = ma[mainMa][key];
  52.                     }
  53.                 }
  54.             }
  55.         }
  56.     }
  57.     ma[mainMa][col[x]]++;
  58.     if (ma[mainMa][col[x]] == cnt[x]){
  59.         dp[x] += col[x];
  60.     }
  61.     else if (ma[mainMa][col[x]] > cnt[x]){
  62.         dp[x] = col[x];
  63.         cnt[x] = ma[mainMa][col[x]];
  64.     }
  65. }
  66.  
  67.  
  68.  
  69. void solve(){
  70.     int n, p;
  71.     cin >> n;
  72.  
  73.     for (int i = 1; i <= n; i++){
  74.         cin >> col[i];
  75.     }
  76.  
  77.     for (int i = 1; i < n; i++){
  78.         int x, y;
  79.         cin >> x >> y;
  80.  
  81.         g[x].pb(y);
  82.         g[y].pb(x);
  83.     }
  84.  
  85.     dfs(1);
  86.  
  87.     for (int i = 1; i <= n; i++){
  88.         cout << dp[i] << ' ';
  89.     }
  90.  
  91. }
  92.  
  93.  
  94. int main() {
  95.     IOS;
  96.     int t = 1;
  97.  
  98.     //cin >> t;
  99.  
  100.     while (t--){
  101.         solve();
  102.     }
  103. }
  104.  
  105.  
  106.  
Advertisement
Add Comment
Please, Sign In to add comment