Pagini recente » Cod sursa (job #1354754) | Cod sursa (job #2280599) | Cod sursa (job #2426478) | Cod sursa (job #2158275) | Cod sursa (job #2702999)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
const int maxn=16005;
vector <int> G[maxn];
int nr_noduri, dp[maxn];
bool vizitat[maxn];
void citire()
{
fin>>nr_noduri;
for(int i=1; i<=nr_noduri; i++)
{
fin>>dp[i];
}
for(int i=1; i<nr_noduri; i++)
{
int a,b;
fin>>a>>b;
G[a].push_back(b);
G[b].push_back(a);
}
}
void dfs(int curent)
{
vizitat[curent]=1;
for(int i=0; i<G[curent].size(); i++)
{
int vecin=G[curent][i];
if(vizitat[vecin])
continue;
dfs(vecin);
if(dp[vecin] > 0)
dp[curent]+=dp[vecin];
}
}
void solve()
{
int ans=0;
dfs(1);
for(int i=1; i<=nr_noduri; i++)
{
if(dp[i] > ans)
ans=dp[i];
}
fout<<ans;
}
int main()
{
citire();
solve();
return 0;
}