Cod sursa(job #1083991)

Utilizator NicuCJNicu B. NicuCJ Data 16 ianuarie 2014 16:43:53
Problema Asmax Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
vector<int> gr[16001];
queue<int> coada;
int n, i, nr[16001], maxim, a, b, xf;
long long q[16001];
bool viz[16001];
int exinc[16001];
int main()
{
	maxim=-16777216;
	ifstream f("asmax.in");
	ofstream g("asmax.out");
	f>>n;
	for(i=1; i<=n; i++)
	{
		f>>q[i];
	}
	for(i=1; i<n; i++)
	{
		f>>a>>b;
		gr[a].push_back(b);
		gr[b].push_back(a);
		nr[a]++;
		nr[b]++;
	}
	for(i=1; i<=n; i++)
	{
		if(nr[i]==1)
		{
			coada.push(i);
			viz[i]=1;
			exinc[i]=1;
		}
	}
	while(!coada.empty())
	{
		
		xf=coada.front(); coada.pop();
		for(i=0; i<gr[xf].size(); i++)
		{
			if(!viz[gr[xf][i]] && q[xf]>0)
			{
				if(!exinc[gr[xf][i]])
				{
					coada.push(gr[xf][i]);
					exinc[gr[xf][i]]++;
				}
				q[gr[xf][i]]=q[gr[xf][i]]+q[xf];
			}
		}
		viz[xf]=1;
	}
	for(i=1; i<=n; i++)
	{
		if(q[i]>maxim)
			maxim=q[i];
	}
	g<<maxim;
}