Cod sursa(job #554857)

Utilizator AndreyPAndrei Poenaru AndreyP Data 15 martie 2011 09:58:51
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <cstdio>
#include <climits>
#include <vector>
using namespace std;
#define N 16010
#define pb push_back

int n;
int v[N];
vector< int > a[N];
int rez = INT_MIN;

inline void citire() {
	scanf("%d",&n);
	
	for(int i=1; i<=n; ++i)
		scanf("%d",&v[i]);
	
	int x,y;
	for(int i=1; i<n; ++i) {
		scanf("%d%d",&x,&y);
		a[x].pb(y);
		a[y].pb(x);
	}
}

void dfs(int nod,int tata) {
	for(size_t i=0,lim=a[nod].size(); i<lim; ++i) {
		if(a[nod][i]==tata)
			continue;
		dfs(a[nod][i],nod);
		v[nod] += v[a[nod][i]];
	}
	
	if(v[nod]>rez)
		rez = v[nod];
	if(v[nod]<0)
		v[nod] = 0;
}

int main() {
	freopen("asmax.in","r",stdin);
	freopen("asmax.out","w",stdout);
	
	citire();
	dfs(1,0);
	printf("%d\n",rez);
	
	return 0;
}