Pagini recente » Cod sursa (job #220702) | Cod sursa (job #78902) | Cod sursa (job #3289649) | Cod sursa (job #108686) | Cod sursa (job #191200)
Cod sursa(job #191200)
#include <stdio.h>
#include <vector>
#include <bitset>
#define Nmax 16001
#define min -(1<<30)
#define pb push_back
#define IN "asmax.in"
#define OUT "asmax.out"
using namespace std;
vector< vector<int> > a(Nmax);
vector <int> s(Nmax);
vector <int> mark(Nmax);
int n,i,sol=min;
void scan()
{
freopen(IN, "r",stdin);
freopen(OUT, "w",stdout);
scanf("%d", &n);
}
void dfs(int x)
{
int l=a[x].size();
mark[x]=1;
for (long i=0;i<l;++i)
if (!mark[a[x][i]])
{
dfs(a[x][i]);
if (s[a[x][i]]>0)
s[x]+=s[a[x][i]];
}
if (s[x]>sol)
sol=s[x];
}
void solve()
{
int x,y;
for (i=1;i<=n;++i)
scanf("%d", &s[i]);
for (i=1;i<n;++i)
{
scanf("%d %d",&x,&y);
a[x].pb(y);
a[y].pb(x);
}
dfs(1);
printf("%d\n",sol);
}
int main()
{
scan();
solve();
return 0;
}