Cod sursa(job #1080866)

Utilizator pulseOvidiu Giorgi pulse Data 12 ianuarie 2014 22:47:05
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>
#include <vector>
#define NMAX 16002
#define INF 0x3f3f3f3f
using namespace std;

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

int n, cost[NMAX], sum[NMAX], smax = -INF;
vector <int> arb[NMAX];
bool used[NMAX];

void ReadData ()
{
	fin >> n;
	for (int i = 1; i <= n; ++i)
		fin >> cost[i];
	for (int i = 1, a, b; i <= n - 1; ++i)
	{
		fin >> a >> b;
		arb[a].push_back (b);
		arb[b].push_back (a);
	}
}

void DFS (int k)
{
		used[k] = true;
		sum[k] = cost[k];
		for (int i = 0; i < arb[k].size (); ++i)
		{
			if (!used[arb[k][i]])
			{
				DFS (arb[k][i]);
				if (sum[arb[k][i]] > 0)
				{
					sum[k] += sum[arb[k][i]];
				}
			}
		}
		if (sum[k] > smax)
			smax = sum[k];
}

void WriteData ()
{
	DFS (1);
	fout << smax << "\n";
}

int main ()
{
	ReadData ();
	WriteData ();
}