Cod sursa(job #1173334)

Utilizator IonMosnoiIon Mosnoi IonMosnoi Data 19 aprilie 2014 11:08:48
Problema Asmax Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;

vector <int> a[17000];
long b[17000],parc[17000],n,x,y;
long sol = -10000000;

long df(int x){
	long sum = 0;
	bool ok = true;
	
	for(int i=0;i<a[x].size();i++)
		if(parc[a[x][i]]!=1){
			parc[a[x][i]]=1;
			sum+= df(a[x][i]);
			ok = false;
			parc[a[x][i]]=0;	
		}
	
	    if(ok){
	    	if(b[x]>0)return b[x];
	    	else return 0;
	    }
	    if(b[x]+sum>0)return b[x]+sum;
	    else return 0;
	
}

int main(){
	freopen("asmax.in","r",stdin);
	freopen("asmax.out","w",stdout);
	scanf("%d",&n);
	long minim=-10000;
	for(int i=1;i<=n;i++){
		scanf("%d",&b[i]);
		minim=max(minim,b[i]);
	}
	for(int i=1;i<=n-1;i++){
		scanf("%d%d",&x,&y);
		a[x].push_back(y);
		a[y].push_back(x);
	}
	for(int i=1;i<=n;i++){
		parc[i]=1;
		sol = max(df(i),sol);
		parc[i]=0;
	}
	if(sol==0)sol = minim;
	printf("%d",sol);
}