Pagini recente » Cod sursa (job #179303) | Cod sursa (job #465155) | Cod sursa (job #1816115) | Cod sursa (job #247100) | Cod sursa (job #3281027)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
///sortare_divizori
vector<int>l[16000];
int n,v[16000],dp[16000],x,y,rot[16000],root,maxim=-2e9;
void dfs(int nod)
{
dp[nod]=v[nod];
for(auto next:l[nod])
{
dfs(next);
}
for(auto next:l[nod])
{
if(dp[next]>0)
dp[nod]+=dp[next];
}
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>v[i];
}
for(int i=1;i<n;i++)
{
fin>>x>>y;
l[x].push_back(y);
rot[y]=1;
}
for(int i=1;i<=n;i++)
{
if(rot[i]==0)
root=i;
}
dfs(root);
for(int i=1;i<=n;i++)
{
maxim=max(dp[i],maxim);
}
fout<<maxim;
}