Cod sursa(job #1605192)

Utilizator qwertyuiTudor-Stefan Berbinschi qwertyui Data 18 februarie 2016 20:20:58
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <utility>

using namespace std;

ifstream fin ("asmax.in");
ofstream fout ("asmax.out");

#define MAXN 16050
#define MINC -16000

vector <vector <int> > edge;
vector <int> best, used;
int N;
int solution = MINC;

int DFS(int node)
{
    int curr_sum = 0;
    used[node] = 1;
    for (int i = 0; i < edge[node].size(); ++i)
		if (!used[edge[node][i]])
		{
			int sub_sum = DFS(edge[node][i]);
			if (sub_sum > 0)
				curr_sum += sub_sum;

		}
	curr_sum += best[node];

	if (curr_sum > solution)
		solution = curr_sum;

    if (curr_sum > 0)
		return curr_sum;
    return 0;
}
int main()
{
    fin >>N;
    edge.resize(N+1);
    best.resize(N+1);
    used.resize(N+1);
    for (int i = 1; i <= N; ++i)
		fin >>best[i];
	for (int i = 1; i < N; ++i)
	{
		int x, y;
		fin >>x >>y;
		edge[x].push_back(y);
		edge[y].push_back(x);
	}
	DFS(1);
	fout <<solution <<'\n';
    return 0;
}