Cod sursa(job #163180)

Utilizator scvalexAlexandru Scvortov scvalex Data 21 martie 2008 16:36:21
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int N;
int V[16001];
vector<int> G[16001];
int R[16001];

void calculeaza(int u, int p) {
	for (vector<int>::iterator v = G[u].begin(); v != G[u].end(); ++v)
		if (*v != p)
			calculeaza(*v, u);
	R[u] = V[u];
	for (vector<int>::iterator v = G[u].begin(); v != G[u].end(); ++v)
		if ((*v != p) && (R[*v] > 0))
			R[u] += R[*v];

	//cout << "Calculez " << u << ": " << R[u] << endl;
}

int main(int argc, char *argv[]) {
	FILE *fi = fopen("asmax.in", "r");
	fscanf(fi, "%d", &N);
	for (int i(1); i <= N; ++i)
		fscanf(fi, "%d", V + i);
	int u, v;
	for (int i(0); i < N - 1; ++i) {
		fscanf(fi, "%d %d", &u, &v);
		G[u].push_back(v);
		G[v].push_back(u);
	}
	fclose(fi);

	/*for (int i(1); i <= N; ++i) {
		cout << i << ": ";
		for (vector<int>::iterator j = G[i].begin(); j != G[i].end(); ++j)
			cout << *j << " ";
		cout << endl;
	}*/

	calculeaza(1, 0);

	int m(1);
	for (int i(2); i <= N; ++i)
		if (R[i] > R[m])
			R[m] = R[i];

	ofstream fout("asmax.out");
	fout << R[m] << endl;
	fout.close();

	return 0;
}