Cod sursa(job #508208)

Utilizator ChallengeMurtaza Alexandru Challenge Data 7 decembrie 2010 20:32:53
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
#include <vector>

using namespace std;

const char InFile[]="asmax.in";
const char OutFile[]="asmax.out";
const int MaxN=16111;

ifstream fin(InFile);
ofstream fout(OutFile);

int N,sol,x,y,v[MaxN],best[MaxN],israd[MaxN],viz[MaxN];
vector<int> a[MaxN];

void dfs(int x)
{
	viz[x]=1;
	best[x]=v[x];
	for(vector<int>::iterator it=a[x].begin();it!=a[x].end();++it)
	{
		if(viz[*it]==0)
		{
			dfs(*it);
			if(best[*it]>0)
			{
				best[x]+=best[*it];
			}
		}
	}
}

int main()
{
	fin>>N;
	for(register int i=1;i<=N;++i)
	{
		fin>>v[i];
	}
	for(register int i=1;i<N;++i)
	{
		fin>>x>>y;
		a[x].push_back(y);
		a[y].push_back(x);
	}
	fin.close();
	
	sol=-(1<<30);
	for(register int i=1;i<=N;++i)
	{
		if(viz[i]==0)
		{
			dfs(i);
		}
		sol=max(sol,best[i]);
	}
	
	fout<<sol;
	fout.close();
	return 0;
}