Cod sursa(job #1627132)

Utilizator TimitocArdelean Andrei Timotei Timitoc Data 3 martie 2016 14:40:14
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <iostream>
#include <cstdio>
#include <vector>
#define MAXN 16050

using namespace std;

int n;
int val[MAXN], par[MAXN], maxi = -16000050;
vector<int> graf[MAXN];

void citire()
{
	scanf("%d", &n);
    for (int i = 1; i <= n; i++)
		scanf("%d", &val[i]);
	for (int i = 1; i <= n-1; i++) {
		int a, b;
        scanf("%d %d", &a, &b);
        graf[a].push_back(b);
		graf[b].push_back(a);
	}

}

int solve(int nod)
{
	int sum = val[nod];
    for (int i = 0, t = graf[nod].size(); i < t; i++) {
		if (par[graf[nod][i]]) continue;
		par[graf[nod][i]] = nod;
        int subarb = solve(graf[nod][i]);
        if (subarb > 0) sum += subarb;
    }
    if (sum > maxi)
		maxi = sum;
    return sum;
}

int main()
{
	freopen("asmax.in", "r", stdin);
	freopen("asmax.out", "w", stdout);

	citire();
	par[1] = 1;
	solve(1);
	printf("%d\n", maxi);

    return 0;
}