Pagini recente » Cod sursa (job #1119172) | Cod sursa (job #2675947) | Cod sursa (job #337013) | Cod sursa (job #3259599) | Cod sursa (job #253252)
Cod sursa(job #253252)
#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();
}