Pagini recente » Istoria paginii utilizator/butnarugiulia | Cod sursa (job #1034174) | Cod sursa (job #1136080) | Cod sursa (job #222787) | Cod sursa (job #1097495)
#include <cstdio>
#include <vector>
#define Nmax 16005
using namespace std;
int N,dp[Nmax],v[Nmax];
bool viz[Nmax],fr[Nmax];
vector <int> L[Nmax];
inline void Dfs(int nod)
{
int i,j,len;
viz[nod]=true; len=L[nod].size();
dp[nod]=v[nod];
for(i=0;i<len;++i)
{
j=L[nod][i];
if(!viz[j])
{
Dfs(j);
if(dp[j]>0)
dp[nod]+=dp[j];
}
}
}
int main()
{
int i,a,b,maxim;
freopen ("asmax.in","r",stdin);
freopen ("asmax.out","w",stdout);
scanf("%d", &N);
for(i=1;i<=N;++i)
scanf("%d", &v[i]);
for(i=1;i<N;++i)
{
scanf("%d%d", &a,&b);
fr[b]=true;
L[a].push_back(b);
L[b].push_back(a);
}
for(i=1;i<=N;++i)
if(!fr[i])
Dfs(i);
maxim=dp[1];
for(i=2;i<=N;++i)
maxim=max(maxim,dp[i]);
printf("%d\n", maxim);
return 0;
}