Pagini recente » Cod sursa (job #1646274) | Cod sursa (job #998919) | Cod sursa (job #17334) | Cod sursa (job #2136688) | Cod sursa (job #2050472)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
const int NMax = 16005;
const int INF = 0x3f3f3f3f;
int N, v[NMax], dp[NMax];
vector < int > G[NMax];
int viz[NMax];
void Read()
{
fin >> N;
for(int i=1; i<=N; ++i)
{
fin >> v[i];
}
for(int i=1; i<N; ++i)
{
int x,y;
fin >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
}
void DFS(int nod)
{
if(!viz[nod])
{
int sz = G[nod].size();
viz[nod] = 1;
if(sz==1)
{
if(v[nod] > 0)
{
dp[nod] = v[nod];
}
return;
}
vector < int > ::iterator it;
for(it=G[nod].begin(); it!=G[nod].end(); ++it)
{
int fiu = *it;
if(!viz[fiu])
DFS(fiu);
if(dp[fiu] > 0)
dp[nod] += dp[fiu];
}
}
}
int main()
{
Read();
for(int i=1; i<=N; ++i)
{
if(!viz[i])
DFS(i);
}
int maxi = -INF;
for(int i=1; i<=N; ++i)
maxi=max(maxi,dp[i]);
fout << maxi;
return 0;
}