Pagini recente » Cod sursa (job #2566769) | Cod sursa (job #2849746) | Cod sursa (job #681443) | Cod sursa (job #1963880) | Cod sursa (job #974754)
Cod sursa(job #974754)
#include <fstream>
#include <list>
using namespace std;
#define inf 16000010
struct nod
{
int val;
list<int> vecini;
}v[16005];
int m[16005];
void parc(int nod,int father)
{
m[nod]=v[nod].val;
list<int>::iterator it;
for(it=v[nod].vecini.begin();it!=v[nod].vecini.end();it++)
if((*it)!=father)
{
parc(*it,nod);
if(m[*it]>0)
m[nod]+=m[*it];
}
}
int main()
{
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int n,i,x,y;
fin>>n;
for(i=1;i<=n;i++)
fin>>v[i].val;
for(i=1;i<n;i++)
{
fin>>x>>y;
v[x].vecini.push_back(y);
v[y].vecini.push_back(x);
}
parc(1,0);
/*
for(i=1;i<=n;i++)
cout<<m[i]<<' ';
cout<<'\n';
*/
int maxim=m[1];
for(i=2;i<=n;i++)
if(m[i]>maxim)
maxim=m[i];
fout<<maxim<<'\n';
fin.close();
fout.close();
return 0;
}