Pagini recente » preoni-2007/runda-finala/poze/pregatiri | Cod sursa (job #1301708) | Cod sursa (job #2267168) | Cod sursa (job #1468047) | Cod sursa (job #834896)
Cod sursa(job #834896)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
vector <int> v[16001];
int val[16001],n;
bool vf[16001];
int dfs(size_t x, size_t start, size_t prev)
{
if(v[x].size()==1 && x!=start)
return val[x];
else
{
int ss=val[x], interm, tempSuma;
for(size_t i=0;i<v[x].size();i++)
if(v[x][i]!=prev)
{
interm=v[x][i];
tempSuma=dfs(interm,start,x);
if(tempSuma>0)
ss+=tempSuma;
}
return ss;
}
}
int main()
{
int iTemp1, iTemp2;
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;
}