Pagini recente » Cod sursa (job #1437402) | Cod sursa (job #1339502) | Cod sursa (job #1697986) | Cod sursa (job #2891061) | Cod sursa (job #2050410)
#include <iostream>
#include <fstream>
#include <bitset>
#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];
bitset < NMax > viz;
void Read()
{
fin >> N;
for(int i=1; i<=N; ++i)
{
fin >> v[i];
dp[i] = 0;
}
for(int i=1; i<N; ++i)
{
int x,y;
fin >> x >> y;
G[x].push_back(y);
}
}
void DFS(int nod)
{
if(!viz[nod])
{
int sz = G[nod].size();
viz[nod] = 1;
if(sz==0)
{
if(v[nod] > 0)
{
dp[nod] = v[nod];
}
return;
}
vector < int > ::iterator it;
for(it=G[nod].begin(); it!=G[nod].end(); ++it)
{
if(!viz[*it])
DFS(*it);
if(dp[*it] > 0)
dp[nod] += dp[*it];
}
}
}
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;
}