Cod sursa(job #845194)

Utilizator arrayAnghel Mihai array Data 30 decembrie 2012 16:14:51
Problema Asmax Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
#include <vector>
using namespace std;
const char iname[] = "asmax.in";
const char oname[] = "asmax.out";
ifstream fin(iname);
ofstream fout(oname);
int N , i , j , x , y , s1 , s2 , solc , sol;
int cn[ 16004 ];
vector < int > v[ 16004 ];
int MN = 1 << 30;
bool mark[ 16004 ];
void DFS(int nod)
{
	mark[ nod ] = true;
	s1 += cn[nod];
	if (MN > s2)
		MN = s2;
	if (solc < s1 - MN)
		solc = s1 - MN;
	s2 += cn[nod];
	vector < int > :: iterator it;
	for (it = v[nod].begin(); it != v[nod].end(); ++it)
	{
		if (!mark[*it])
			DFS(*it);
	}
}
int main()
{
	fin >> N;
	for (i = 1; i <= N; ++i)
		fin >> cn[i];
	for (i = 1; i <= N-1; ++i)
	{
		fin >> x >> y;
		v[x].push_back(y);
		v[y].push_back(x);
	}
	solc = MN * (-1);
	DFS(1);
	if (solc > sol)
		sol = solc;
	fout << sol << '\n';
	return 0;
}