Cod sursa(job #607048)

Utilizator SpiderManSimoiu Robert SpiderMan Data 10 august 2011 17:43:40
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
# include <cstdio>
# include <vector>
using namespace std;

const char *FIN = "asmax.in", *FOU = "asmax.out";
const int MAX = 16005;

vector <int> G[MAX];
int N, sol = -0x3f3f3f3f, V[MAX];

inline void getmax (int &a, int b) {
    a = a > b ? a : b;
}

int dfs (int node, int tmp) {
	int sum = 0;
	for (vector <int> :: iterator it = G[node].begin (); it != G[node].end (); ++it)
		if (*it != tmp) {
			int aux = dfs (*it, node);
			if (aux > 0) sum += aux;
		}
	getmax (sol, sum += V[node]);
	return sum;
}

int main (void) {
    freopen (FIN, "r", stdin);

    scanf ("%d", &N);
    for (int i = 1; i <= N; ++i)
        scanf ("%d", V + i);
    for (int i = 1, x, y; i < N; ++i) {
        scanf ("%d %d", &x, &y);
        G[x].push_back (y);
        G[y].push_back (x);
    }
    dfs (1, 0);
    fprintf (fopen (FOU, "w"), "%d", sol);
}