fork(1) download
  1. //----------shivam_wadhwa----------//
  2. #include <bits/stdc++.h>
  3. #define ll long long int
  4. #define sc1(x) scanf("%d",&x)
  5. #define sc2(x,y) scanf("%d%d",&x,&y)
  6. #define scll(x) scanf("%lld",&x)
  7. #define pint(c) printf("%d",c)
  8. #define pll(c) printf("%lld",c)
  9. #define ps() printf(" ")
  10. #define pn() printf("\n")
  11.  
  12. #define vi vector<int>
  13. #define vii vector<pair<int,int> >
  14. #define mp make_pair
  15. #define pb push_back
  16.  
  17. //loops
  18. #define ff(i,n,a) for(i=a;i<n;++i)
  19. #define fb(i,n,a) for(i=n,i>=a;--i)
  20.  
  21. //constants
  22. const int mxn=1e5+1;
  23. const int MOD=1e9+7;
  24. using namespace std;
  25. vi adj[mxn];
  26. ll sol[mxn];
  27. int visited[mxn];
  28. ll A[mxn];
  29. ll DFS(int src)
  30. {
  31. visited[src]=1;
  32. ll sum=A[src];
  33. for(int i=0;i<adj[src].size();++i)
  34. {
  35. int v=adj[src][i];
  36. if(!visited[v])
  37. {
  38. ll x=DFS(v);
  39. if(x>0)
  40. sum+=x;
  41. }
  42. }
  43. return sol[src]=sum;
  44. }
  45. void init(int n)
  46. {
  47. for(int i=1;i<=n;++i)
  48. {
  49. adj[i].clear();
  50. visited[i]=0;
  51. }
  52. }
  53. int main()
  54. {
  55. int t=1;
  56. sc1(t);
  57. while(t--)
  58. {
  59. int n;
  60. sc1(n);
  61. init(n);
  62. for(int i=1;i<=n;++i)
  63. {
  64. scanf("%lld",&A[i]);
  65. }
  66. for(int i=0;i<n-1;++i)
  67. {
  68. int a,b;
  69. sc2(a,b);
  70. adj[a].pb(b);
  71. adj[b].pb(a);
  72. }
  73. DFS(1);
  74. ll ans=LLONG_MIN;
  75. for(int i=1;i<=n;++i)
  76. {
  77. ans=max(ans,sol[i]);
  78. }
  79. printf("%lld\n",ans);
  80. }
  81. return 0;
  82. }
Success #stdin #stdout 0s 6596KB
stdin
1
5
5 -1 2 3 -4
1 2
3 1
4 5
1 4
stdout
10