Advertisement
Guest User

Untitled

a guest
Apr 19th, 2016
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.56 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6. typedef pair<int, int> ii;
  7. #define fr first
  8. #define sc second
  9. #define mp make_pair
  10. #define pb push_back
  11.  
  12. const int MAXN = 100010;
  13. const int MAXK = 21;
  14.  
  15. int n, k;
  16. ll dp[MAXN][MAXK];
  17. ll sum[MAXN][MAXK];
  18. int p[MAXN];
  19. vector<int> adj[MAXN];
  20. int ar[MAXN];
  21. void pre(int u, int par = -1)
  22. {
  23.     p[u] = par;
  24.     for (int i = 0; i < adj[u].size(); i++) if (adj[u][i] - par)
  25.         pre(adj[u][i], u);
  26. }
  27.  
  28. void dfs(int u)
  29. {
  30.     dp[u][0] = ar[u];
  31.     for (int i = 0; i < adj[u].size(); i++) if (adj[u][i] - p[u])
  32.     {
  33.         int v = adj[u][i];
  34.         dfs(v);
  35.         for (int j = 1; j <= k; j++)
  36.             dp[u][j] += dp[v][j - 1];
  37.     }
  38. }
  39.  
  40. int main()
  41. {
  42.     scanf("%d%d", &n, &k);
  43.     for (int i = 0; i < n - 1; i++)
  44.     {
  45.         int u, v;
  46.         scanf("%d%d", &u, &v);
  47.         adj[u].pb(v);
  48.         adj[v].pb(u);
  49.     }
  50.     for (int i = 1; i <= n; i++)
  51.         scanf("%d", &ar[i]);
  52.     pre(1);
  53.     dfs(1);
  54.     for (int i = 1; i <= n; i++)
  55.     {
  56.         sum[i][0] = dp[i][0];
  57.         for (int j = 1; j <= k; j++)
  58.             sum[i][j] = sum[i][j - 1] + dp[i][j];
  59.     }
  60.     for (int u = 1; u <= n; u++)
  61.     {
  62.         ll ans = 0;
  63.         int rem = k;
  64.         int v = u;
  65.         int prevv = -1;
  66.         while (v != -1 && rem >= 0)
  67.         {
  68.             ans += sum[v][rem];
  69.             if (prevv != -1 && rem)
  70.                 ans -= sum[prevv][rem - 1];
  71.             prevv = v;
  72.             v = p[v];
  73.             rem--;
  74.         }
  75.         printf("%I64d\n", ans);
  76.     }
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement