Pagini recente » Cod sursa (job #160379) | Cod sursa (job #2102700) | Cod sursa (job #2746881) | Cod sursa (job #2533403) | Cod sursa (job #834889)
Cod sursa(job #834889)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
vector <int> v[16001];
int val[16001],n,vmax=-1000000000;
bool vf[16001];
int dfs(size_t x, size_t start, size_t prev)
{
if(v[x].size()==1 && x!=start)
return val[x]>0?val[x]:0;
else
{
int ss=val[x], interm;
for(size_t i=0;i<v[x].size();i++)
if(v[x][i]!=prev)
{
interm=v[x][i];
ss+=dfs(interm,start,x);
}
return ss>0?ss:0;
}
}
int main()
{
int iTemp1, iTemp2, suma;
in>>n;
for(int i=1;i<=n;i++)
in>>val[i];
for(int i=0;i<n-1;i++)
{
in>>iTemp1>>iTemp2;
v[iTemp1].push_back(iTemp2);
v[iTemp2].push_back(iTemp1);
if(v[iTemp1].size()==1)
vf[iTemp1]=1;
else
vf[iTemp1]=0;
if(v[iTemp2].size()==1)
vf[iTemp2]=1;
else
vf[iTemp1]=0;
}
for(int i=1;i<=n;i++)
if(vf[i])
{
suma=dfs(i,i,0);
if(suma>vmax)
vmax=suma;
}
out<<vmax;
in.close();
out.close();
return 0;
}