Advertisement
aayyk

Untitled

Mar 12th, 2020
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.28 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <cstdlib>
  4. #include <algorithm>
  5. #include <vector>
  6. #include <queue>
  7. #include <stack>
  8. #include <climits>
  9. #include <string>
  10. #include <set>
  11. #include <cmath>
  12. #include <map>
  13. #include <unordered_map>
  14. #include <numeric>
  15. #include <random>
  16. #include <memory>
  17. #include <chrono>
  18. #include <iterator>
  19. #include <functional>
  20. #include <unordered_set>
  21. #include <cassert>
  22. #include <cstring>
  23. #include <bitset>
  24. #ifdef LOCAL
  25. #include "debug.h"
  26. #else
  27. #define debug(x...)
  28. #endif
  29. //#define int ll
  30.  
  31. //#pragma GCC optimize("Ofast")
  32. //#pragma GCC target("avx2")
  33.  
  34. using namespace std;
  35. typedef long long ll;
  36. typedef long double ld;
  37. typedef pair < int, int > pii;
  38. typedef pair < ll, ll > pll;
  39. #define sz(x) int((x).size())
  40.  
  41. #ifndef LOCAL
  42. mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
  43. #else
  44. mt19937 rng(228);
  45. #endif
  46.  
  47. const int N = 2e5 + 7;
  48. const int inf = INT_MAX / 2;
  49. const ll INF = LLONG_MAX / 3;
  50. const int MOD = 1e9 + 7;
  51. const double eps = 1e-6;
  52. const string cars[] = {"πŸš—", "πŸš•", "πŸš™"};
  53.  
  54. int c[N];
  55. vector < int > g[N];
  56. map < int, int > dp[N];
  57. int dp2[N], n, a[N];
  58. vector < int > order;
  59.  
  60. void dfs(int u, int p) {
  61.     a[u] = p;
  62.     for (int v : g[u]) {
  63.         if (v != p) {
  64.             dfs(v, u);
  65.             dp[u][v] = dp2[v];
  66.            
  67.             dp2[u] += max(0, dp2[v]);
  68.         }
  69.     }
  70.  
  71.  
  72.     //debug(u, dp2[u]);
  73.     if (c[u]) {
  74.         dp2[u]++;
  75.     }
  76.     else {
  77.         dp2[u]--;
  78.     }
  79.     order.push_back(u);
  80. }
  81.  
  82. signed main() {
  83.     //debug(true);
  84. #ifdef LOCAL
  85.     freopen("input.txt", "r", stdin);
  86.     //freopen("output.txt", "w", stdout);
  87. #endif
  88.     cout << fixed << setprecision(4);
  89.     ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  90.  
  91.     cin >> n;
  92.     for (int i = 1; i <= n; i++) {
  93.         cin >> c[i];
  94.     }
  95.  
  96.     for (int i = 1; i < n; i++) {
  97.         int u, v;
  98.         cin >> u >> v;
  99.  
  100.         g[u].push_back(v);
  101.         g[v].push_back(u);
  102.     }
  103.  
  104.     dfs(1, 0);
  105.  
  106.     order.pop_back();
  107.     reverse(order.begin(), order.end());
  108.  
  109.     for (int u : order) {
  110.         debug(u, dp2[a[u]], dp[a[u]][u]);
  111.         dp2[u] += max(0, dp2[a[u]] - max(0, dp[a[u]][u]));
  112.     }
  113.  
  114.     for (int i = 1; i <= n; i++) {
  115.         cout << dp2[i] << " ";
  116.     }
  117.  
  118.     return 0;
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement