Pagini recente » Cod sursa (job #1499731) | Cod sursa (job #1580029) | Cod sursa (job #2428208) | Cod sursa (job #423865) | Cod sursa (job #2244546)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int n,i,j,nr;
int v[16005],mx[16005],s[16005];
bool bl[16005];
vector<int> ad[16005];
void sgm(int nd)
{
bl[nd]=1;
if(nd!=1 && ad[nd].size()==1)
{
mx[nd]=v[nd];
s[nd]=v[nd];
return;
}
mx[nd]=-10000;
int ss=v[nd];
for(auto j:ad[nd])
if(bl[j]==0)
{
sgm(j);
if(s[j]>0) ss+=s[j];
mx[nd]=max(mx[nd], mx[j]);
}
mx[nd]=max(mx[nd], ss);
s[nd]=ss;
}
int main() {
fin>>n;
for(i=1;i<=n;i++)
fin>>v[i];
for(i=1;i<n;i++)
{
fin>>j>>nr;
ad[j].push_back(nr);
ad[nr].push_back(j);
}
sgm(1);
fout<<mx[1]<<"\n";
}