Cod sursa(job #2050541)

Utilizator cristii2000cristiiPanaite Cristian cristii2000cristii Data 28 octombrie 2017 10:22:10
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <iostream>
#include <fstream>
#include <vector>
#define MAX 16005
#include <algorithm>

using namespace std;

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

int n;
int costuri[MAX];
int tata[MAX];
int din[MAX]; /// suma maxima a unui subarbore cu radacina in nodul i

int sum = -0x3f3f3f;

vector <int> graf[MAX];

bool viz[MAX];

void citire()
{
	fin>>n;
	for(int i = 1; i <= n; i++)
		fin >> costuri[i];

	for(int i = 1; i < n; i++)
	{
		int x, y;
		fin >> x >> y;
		graf[x].push_back(y);
		graf[y].push_back(x);
	}
}

int dfs(int nod)
{
	if (viz[nod])
		return din [nod];

	viz[nod] = 1;

	din[nod] = costuri[nod];

	sum = max(sum, din[nod]);


	for(int i = 0; i < graf[nod].size(); i++)
	{
		if(tata[nod] != graf[nod][i]) /// graf[nod][i] = vecinul
		{
			tata[graf[nod][i]] = nod;
			int v = dfs(graf[nod][i]);
			if(v > 0)
			{
				din[nod] += v;
				sum = max(sum, din[nod]);
			}
		}
	}
	return din[nod];
}

int main()
{

	citire();

	dfs(1);

	fout << sum;

    return 0;
}