Pagini recente » Cod sursa (job #2521610) | Cod sursa (job #1383143) | Cod sursa (job #1542997) | Cod sursa (job #3311108) | Cod sursa (job #3332758)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
const int NMAX=16000;
int n,i,v[NMAX+5],node1,node2,sol=-1e9,j,dp[NMAX+5];
vector <int> adj[NMAX+5];
bool viz[NMAX+5];
void init()
{
for (int i=1; i<=n; i++)
viz[i]=0;
for (int i=1; i<=n; i++)
dp[i]=-1e9;
}
void dfs(int node)
{
viz[node]=1;
dp[node]=v[node];
for (auto node2: adj[node])
{
if (!viz[node2])
{
dfs(node2);
if (dp[node2]>0)
dp[node]+=dp[node2];
}
}
}
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(nullptr); fout.tie(nullptr);
fin>>n;
for (i=1; i<=n; i++)
fin>>v[i];
for (i=1; i<n; i++)
{
fin>>node1>>node2;
adj[node1].push_back(node2);
adj[node2].push_back(node1);
}
// for (i=1; i<=n; i++)
// {
// init();
dfs(1);
for (j=1; j<=n; j++)
sol=max(sol,dp[j]);
// }
fout<<sol;
return 0;
}