fork download
  1. #include<bits/stdc++.h>
  2. #define TIME (1.0* clock()/CLOCKS_PER_SEC)
  3. #define pb push_back
  4. #define eb emplace_back
  5. #define id1 (id<<1)
  6. #define id2 (id<<1)|1
  7. #define ll long long
  8. #define ii pair<int,int>
  9. #define vi vector<int>
  10. #define vii vector<pair<int,int>>
  11. #define vl vector<long long>
  12. #define vll vector <pair<ll,ll>>
  13. #define li pair<long long,int>
  14. #define vil vector <pair<int,ll>>
  15. #define db double
  16. #define ff first
  17. #define ss second
  18. #define lb lower_bound
  19. #define ub upper_bound
  20. #define FOR(i, a, b) for (int i = (a); i <=(b); i++)
  21. #define F0R(i, a) FOR(i, 0, a-1)
  22. #define ROF(i, a, b) for (int i = (b); i >= (a); i--)
  23. #define R0F(i, a) ROF(i, 0, a-1)
  24. #define rep(a) F0R(_, a)
  25. #define each(a, x) for (auto &a : x)
  26. #define ALL(x) (x).begin(),(x).end()
  27. #define pq priority_queue <li, vector <li>, greater <li>>
  28. using namespace std;
  29. const int maxn=2e5+5;
  30. //const int MOD=1e9+7;
  31. //const int MOD=998244353;
  32. //const int dx[4]{1, 0, -1, 0}, dy[4]{0, 1, 0, -1};
  33. int n;
  34. vector<int> ke[maxn];
  35.  
  36. ll a[maxn];
  37. ll subtree[maxn];
  38. ll dp[maxn];
  39. ll total,ans;
  40.  
  41. void dfs(int u,int p,int depth){
  42. subtree[u]=a[u];
  43. dp[1]+=depth*a[u];
  44. for(int v:ke[u]){
  45. if(v==p) continue;
  46. dfs(v,u,depth+1);
  47. subtree[u]+=subtree[v];
  48. }
  49. }
  50.  
  51. void dfs2(int u,int p){
  52. for(int v:ke[u]){
  53. if(v==p) continue;
  54. dp[v]=dp[u]+total-2*subtree[v];
  55. ans=max(ans,dp[v]);
  56. dfs2(v,u);
  57. }
  58. }
  59.  
  60.  
  61. void solve(){
  62. cin>>n;
  63. for(int i=1;i<=n;i++){
  64. cin>>a[i];
  65. total+=a[i];
  66. }
  67. for(int i=1;i<n;i++){
  68. int u,v;
  69. cin>>u>>v;
  70. ke[u].pb(v);
  71. ke[v].pb(u);
  72. }
  73.  
  74. dfs(1,0,0);
  75. ans=dp[1];
  76.  
  77. dfs2(1,0);
  78. cout<<ans;
  79. return;
  80. }
  81. signed main(){
  82. ios_base::sync_with_stdio(false);
  83. cin.tie(NULL);cout.tie(NULL);
  84. if (fopen("TASK.INP", "r")){
  85. freopen("TASK.INP", "r", stdin);
  86. freopen("TASK.OUT", "w", stdout);
  87. }
  88. int ntest;
  89. ntest=1;
  90. //cin>>ntest;
  91.  
  92. for(int i=1;i<=ntest;i++) solve();
  93. cerr<<"\n"<<"Time elapsed "<<TIME<<"s.\n";
  94. return 0;
  95. }
Success #stdin #stdout #stderr 0.01s 9124KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Time elapsed 0.007425s.