Cod sursa(job #191200)

Utilizator andrei-alphaAndrei-Bogdan Antonescu andrei-alpha Data 25 mai 2008 17:34:09
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#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;
}