Pagini recente » Cod sursa (job #2212954) | Cod sursa (job #2124382) | Cod sursa (job #2104738) | Cod sursa (job #801599) | Cod sursa (job #2947121)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("asmax.in");
ofstream g ("asmax.out");
vector<int>adiacenta[16001];
int n;
bool viz[16001];
int valori[16001],sume[16001];
void DFS(int nod)
{
viz[nod] = 1;
sume[nod] = valori[nod];
for(auto &x:adiacenta[nod])
{
if(!viz[x])
{
DFS(x);
if(sume[x]>0)
{
sume[nod]+=sume[x];
}
}
}
}
int main()
{
f >> n;
for(int i = 1; i<=n; i++)
f >> valori[i];
for(int i = 1; i<n; i++)
{
int x,y;
f >> x >> y;
adiacenta[x].push_back(y);
adiacenta[y].push_back(x);
}
DFS(1);
int s = -10000000;
for(int i = 1; i<=n; i++)
s = max(s,sume[i]);
g << s;
}