Pagini recente » Cod sursa (job #216908) | Cod sursa (job #738144) | Cod sursa (job #2556646) | Cod sursa (job #2964134) | Cod sursa (job #834893)
Cod sursa(job #834893)
#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;
if(x==start)
ss=val[x]>0?val[x]:0;
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])
{
out<<dfs(i,i,0);
break;
}
in.close();
out.close();
return 0;
}