Cod sursa(job #672110)

Utilizator CBogdanCiobanu Bogdan CBogdan Data 1 februarie 2012 17:06:13
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<cstdio>
#include<vector>
using namespace std;

int n,x,y,i,sol=1<<31,value[16015],visited[16015];
vector<int> G[16015];

void read(),solve(),dfs(int);

int main()
{
	read();
	solve();
	
	return 0;
}

void read()
{
	freopen("asmax.in","r",stdin);
	freopen("asmax.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++){scanf("%d",&value[i]);if(sol<value[i])sol=value[i];}
	for(i=1;i<n;i++){scanf("%d%d",&x,&y);G[x].push_back(y);G[y].push_back(x);}
}

void solve()
{
	for(i=1;i<=n;i++)
	{
		if(!visited[i])
			dfs(i);
	}
	printf("%d\n",sol);
}

void dfs(int node)
{
	visited[node]=1;
	for(vector<int>::iterator it=G[node].begin();it!=G[node].end();it++)
	{
		if(!visited[*it])
		{
			dfs(*it);
			if(value[*it]>0)value[node]+=value[*it];
		}
	}
	if(sol<value[node])sol=value[node];
}