Cod sursa(job #21439)

Utilizator ProstuStefan-Alexandru Filip Prostu Data 23 februarie 2007 15:25:08
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <cstdio>
#include <vector>

using namespace std;

#define PB push_back

const int NMAX = 1 << 14;

int N, rez = -NMAX;
int A[NMAX];
vector <int> G[NMAX];

void read() {
	FILE *fin = fopen("asmax.in", "rt");
	int i, u, v;

	fscanf(fin, " %d",  &N);

	for (i = 1; i <= N; ++i)
		fscanf(fin, " %d", A + i);
	
	for (i = 1; i < N; ++i) {
		fscanf(fin, " %d %d", &u, &v);
		G[u].PB(v);
		G[v].PB(u);
	}

	fclose(fin);
}

int DFS(int k, int t) {
	int s, r;
	unsigned i;

	s = 0;
	for (i = 0; i < G[k].size(); ++i)
		if (G[k][i] != t) {
			r = DFS(G[k][i], k);
			if (r > 0) s += r;
		}

	s += A[k];
	rez >?= s;

	return s;
}

void write() {
	FILE *fout = fopen("asmax.out", "wt");

	fprintf(fout, "%d\n", rez);

	fclose(fout);
}

int main() {

	read();

	DFS(1, 0);

	write();

	return 0;
}