bhupixb

Recursive sum of each sub tree

Jul 8th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.20 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. //#include <ext/pb_ds/assoc_container.hpp>
  3. using namespace std;
  4. #define f(i,a,n) for(int i = a; i < n; i++)
  5. #define pb(x) push_back(x)
  6. vector < vector < int > > v(100034);
  7. int vis[100123] ={0};
  8. int bn_gya_bsdka[1000000];
  9. vector < int > s;
  10. int arr[100012] = {0};int res = 0,ans = 1000000000;
  11. int dfs(int top){
  12. vis[top] = 1;int sum = 0;
  13. // if(v[top].size() == 1){arr[top] = bn_gya_bsdka[top];return bn_gya_bsdka[top];}
  14. for(auto i : v[top]){
  15. if(!vis[i]){
  16. sum += dfs(i);;
  17. //dfs(i);
  18. }
  19. }
  20. // cout << top << ' ' << sum << '\n';
  21. if(top != 1)
  22. ans = min(ans,abs(res-2*(sum + bn_gya_bsdka[top])));
  23. arr[top] = sum + bn_gya_bsdka[top];
  24. return sum + bn_gya_bsdka[top];
  25. }
  26. void dfs1(int i){
  27. vis[i] = 1;
  28. cout << i << ' ';
  29. for(auto j : v[i]){
  30. if(!vis[j])dfs1(j);
  31. }
  32. }
  33. int main(){
  34. int n;
  35. cin >> n;
  36. //vector < pair < int, int > > v;
  37. f(i,0,n)cin >> bn_gya_bsdka[i+1],res += bn_gya_bsdka[i+1];
  38. vector < pair < int, int > > p;
  39. int l, r;
  40. f(i,0,n){
  41. cin >> l >> r;
  42. // p.push_back({l,r});
  43. v[l].pb(r),v[r].pb(l);
  44. }
  45. int y = dfs(1);
  46. cout << ans;
  47. return 0;
  48. }
Add Comment
Please, Sign In to add comment