Pagini recente » Cod sursa (job #2895528) | Cod sursa (job #1694859) | Cod sursa (job #1245164) | Cod sursa (job #2090167) | Cod sursa (job #468736)
Cod sursa(job #468736)
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
#define file_in "asmax.in"
#define file_out "asmax.out"
#define nmax 16010
int n;
vector<int> G[nmax];
int smin,nr,m[nmax],q[nmax];
int viz[nmax];
int v[nmax];
void citire()
{
int i,a,b;
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d", &n);
for (i=1;i<=n;++i)
scanf("%d", &v[i]);
for (i=1;i<n;++i)
{
scanf("%d %d", &a, &b);
G[a].push_back(b);
G[b].push_back(a);
}
}
void dfs(int nod)
{
m[nod]=v[nod];
if (viz[nod])
return ;
viz[nod]=1;
int i;
for (i=0;i<G[nod].size();++i)
if (!viz[G[nod][i]])
{
dfs(G[nod][i]);
if (m[G[nod][i]]>0)
m[nod]+=m[G[nod][i]];
}
}
void solve()
{
int i;
dfs(1);
int maxx=-100000;
for (i=1;i<=n;++i)
if (m[i]>maxx) maxx=m[i];
printf("%d\n", maxx);
}
int main()
{
citire();
solve();
fclose(stdin);
fclose(stdout);
return 0;
}