Pagini recente » Cod sursa (job #167434) | Cod sursa (job #1206348) | Cod sursa (job #407170) | Istoria paginii preoni-2006/runda-2/solutii | Cod sursa (job #1278086)
#include <fstream>
#include <list>
#define INF 0xfffffff;
using namespace std;
int maxx;
short int n,a , b;
short int vis[16001], v[16001];
list <short int> nod[16001];
int dfs(int vf)
{
int s;
vis[vf]=1;
s=v[vf];
for(list <short int>::iterator j=nod[vf].begin(); j!=nod[vf].end(); ++j)
{
if(vis[*j]==0)
{
s+=(dfs(*j));
}
}
if(s>maxx)
maxx=s;
if(s<0)
s=0;
return s;
}
int main()
{
//freopen(stdin, "",);
//fprintf(stderr, "");
ifstream in("asmax.in");
ofstream out("asmax.out");
in>>n;
maxx=-INF;
for(int i=1; i<=n; ++i)
{
in>>v[i];
}
for(int i=1; i<n; ++i)
{
in>>a>>b;
nod[a].push_back(b);
nod[b].push_back(a);
}
dfs(1);
out<<maxx<<"\n";
in.close();
out.close();
return 0;
}