Advertisement
meow1801

Untitled

Dec 17th, 2015
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.57 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define mp make_pair
  4. #define fr first
  5. #define sc second
  6. #define pb push_back
  7.  
  8. vector<pair<long long,long long> > adjlist[500005];
  9. long long pop[500005],sz[500005],dst[500005],ans[500005],zero,tot;
  10. bool v[500005],vs[500005],va[500005];
  11.  
  12. void dfs(long long node, long long dist) {
  13.     if (v[node]) return;
  14.     v[node] = true;
  15.     zero += (dist * pop[node]);
  16.     dst[node] = dist;
  17.     for (auto it : adjlist[node])
  18.         dfs(it.fr, dist+it.sc);
  19. }
  20.  
  21. void subtree(long long node) {
  22.     if (vs[node]) return;
  23.     vs[node] = true;
  24.     long long tmp = 0;
  25.     for (auto it : adjlist[node])
  26.         if (it.fr != node) {
  27.             subtree(it.fr);
  28.             tmp += sz[it.fr];
  29.         }
  30.     sz[node] = pop[node] + tmp;
  31.     return;
  32. }
  33.  
  34. void dfs2(long long node, long long prev) {
  35.     if (va[node]) return;
  36.     va[node] = true;
  37.     if (prev != -1)
  38.         ans[node] = ans[prev] - dst[node]*sz[node] + dst[node]*(tot-sz[node]);
  39.     for (auto it : adjlist[node])
  40.         dfs2(it.fr, node);
  41. }
  42.  
  43. int main() {
  44.     //freopen("input.txt","r",stdin);
  45.     ios::sync_with_stdio(0);
  46.     cin.tie(0);
  47.     cout.tie(0);
  48.     long long n,x,y,c;
  49.     cin >> n;
  50.     for (int i=0; i<n; i++) {
  51.         cin >> pop[i];
  52.         tot += pop[i];
  53.     }
  54.     for (int i=0; i<n-1; i++) {
  55.         cin >> x >> y >> c;
  56.         adjlist[x].pb(mp(y,c));
  57.         adjlist[y].pb(mp(x,c));
  58.     }
  59.     dfs(0,0);
  60.     subtree(0);
  61.     ans[0] = zero;
  62.     dfs2(0,-1);
  63.     for (int i=0; i<n; i++) {
  64.         if (i) cout << " ";
  65.         cout << ans[i];
  66.     }
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement