Cod sursa(job #1003215)

Utilizator beldeabogdanBogdan Beldea beldeabogdan Data 29 septembrie 2013 22:30:29
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <cstdio>
#include <vector>
using namespace std;

int smax[16005];
int val[16005];
vector <int> v[16005];
bool viz[16005];
int n;

void dfs(int n) {
	viz[n] = true;
	smax[n] = val[n];
	while (!v[n].empty()) {
		int nod = v[n].back(); v[n].pop_back();
		if (!viz[nod]) {
			dfs(nod);
			if (smax[nod] > 0) smax[n] += smax[nod];
		}
	}
}

int main() {
	freopen("asmax.in","r",stdin);
	freopen("asmax.out","w",stdout);
	scanf("%d",&n);
	for (int i=1;i<=n;i++) scanf("%d",&val[i]);
	for (int i=1;i<n;i++) {
		int a,b;
		scanf("%d %d",&a,&b);
		v[a].push_back(b);
		v[b].push_back(a);
	}
	dfs(1);
	int maxim = -2100000000;
	for (int i=1;i<=n;i++) if (smax[i] > maxim) maxim = smax[i];
	printf("%d\n",maxim);
	return 0;
}