fork download
  1.  
  2. #include <bits/stdc++.h>
  3.  
  4. using namespace std;
  5.  
  6. using ll = long long;
  7. const int MOD = 1000000007;
  8. const int MOD2 = 998244353;
  9. const ll INF = 1e18;
  10. const int MX = 1000001; //check the limits, dummy
  11.  
  12.  
  13. ll modExp(ll base, ll power) {
  14. if (power == 0) {
  15. return 1;
  16. } else {
  17. ll cur = modExp(base, power / 2); cur = cur * cur; cur = cur % MOD;
  18. if (power % 2 == 1) cur = cur * base;
  19. cur = cur % MOD;
  20. return cur;
  21. }
  22. }
  23.  
  24. ll inv(ll base) {
  25. return modExp(base, MOD-2);
  26. }
  27.  
  28.  
  29. ll mul(ll A, ll B) {
  30. return (A*B)%MOD;
  31. }
  32.  
  33. ll add(ll A, ll B) {
  34. return (A+B)%MOD;
  35. }
  36.  
  37. ll dvd(ll A, ll B) {
  38. return mul(A, inv(B));
  39. }
  40.  
  41. ll sub(ll A, ll B) {
  42. return (A-B+MOD)%MOD;
  43. }
  44. ll cielDiv(ll A , ll B) {
  45. return (A + B - 1)/B;
  46. }
  47.  
  48. ll* facs = new ll[MX];
  49. ll* facInvs = new ll[MX];
  50.  
  51. ll choose(ll a, ll b) {
  52. if (b > a) return 0;
  53. if (a < 0) return 0;
  54. if (b < 0) return 0;
  55. ll cur = facs[a];
  56. cur = mul(cur, facInvs[b]);
  57. cur = mul(cur, facInvs[a-b]);
  58. return cur;
  59. }
  60.  
  61.  
  62.  
  63.  
  64.  
  65. void initFacs() {
  66. facs[0] = 1;
  67. facInvs[0] = 1;
  68. for (int i = 1 ; i < MX ; i ++ ) {
  69. facs[i] = (facs[i-1] * i) % MOD;
  70. facInvs[i] = inv(facs[i]);
  71. }
  72. }
  73. const int maxn = 200005;
  74. int n;
  75.  
  76.  
  77. vector<int> adj[maxn];
  78. int c[maxn];
  79.  
  80.  
  81. int dp[maxn];
  82. int res[maxn];
  83.  
  84.  
  85. void dfs(int a,int p ) {
  86.  
  87. int v = c[a];
  88.  
  89. for (int c : adj[a]) {
  90. if (c == p) continue;
  91.  
  92. dfs(c, a);
  93. dp[v] += max(dp[c], 0);
  94. }
  95. dp[v] += v;
  96. }
  97.  
  98. void dfs2(int a,int p ) {
  99. for (int c : adj[a]) {
  100. if (c == p) continue;
  101. int toparentcost = dp[a] - max(dp[c] , 0);
  102. dp[c] = dp[c] + toparentcost;
  103. dfs2(c, a);
  104. }
  105. }
  106.  
  107. int main() {
  108. ios_base::sync_with_stdio(0); cin.tie(0);
  109. int n ; cin >> n;
  110. for (int i = 1 ; i <= n; i ++) {
  111. int x;
  112. cin >> x;
  113. if (x == 1) {
  114. c[i] = 1;
  115. } else {
  116. c[i] = -1;
  117. }
  118. }
  119. for (int i = 1 ; i <= n; i ++) {
  120. cin >> c[i];
  121. }
  122.  
  123. for (int i = 0 ; i < n- 1; i ++) {
  124. int a , b ; cin >> a >> b;
  125. adj[a].push_back(b);
  126. adj[b].push_back(a);
  127. }
  128. for (int i = 1 ; i <= n; i ++) {
  129. cout << res[i] << ' ';
  130. }
  131.  
  132.  
  133. return 0;
  134. }
  135.  
Success #stdin #stdout 0.01s 9280KB
stdin
9
0 1 1 1 0 0 0 0 1
1 2
1 3
3 4
3 5
2 6
4 7
6 8
5 9
stdout
0 0 0 0 0 0 0 0 0