Cod sursa(job #512)

Utilizator mariusdrgdragus marius mariusdrg Data 11 decembrie 2006 14:21:04
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<stdio.h>
#include<vector>

using namespace std;


const int maxn = 34001;
vector <int> a[maxn];
int i;
int n;
int c[maxn];
long long cf[maxn];
int ver[maxn];
int x,y;

void dfs(int i)
{

        ver[i]=1;
        vector<int>::iterator it;
        for(it=a[i].begin();it!=a[i].end();it++)
                if (ver[*it]==0)   dfs(*it);
        for(it=a[i].begin();it!=a[i].end();it++)
                if (cf[*it]>0)cf[i]+=cf[*it];
        cf[i]+=c[i];
}



int main()
{
        freopen("asmax.in","r",stdin);
        freopen("asmax.out","w",stdout);
        scanf("%d",&n);
        for(i=1;i<=n;i++)
        {
                scanf("%d",&c[i]);
        }
        for(i=1;i<=n-1;i++)
        {
                scanf("%d %d",&x,&y);
                a[x].push_back(y);
                a[y].push_back(x);
        }
        dfs(1);
        long long max=-100000000;
        for(i=1;i<=n;i++)
                if (max<cf[i]) max=cf[i];
        printf("%lld\n",max);



        return 0;


}