Cod sursa(job #837574)

Utilizator dariusdariusMarian Darius dariusdarius Data 18 decembrie 2012 10:49:38
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include<stdio.h>
#include<vector>
using namespace std;
vector<int> v[16005];
int s[16005],a[16005];
bool viz[16005];
int max(int a,int b) {return a>b?a:b;}
void dfs(int u)
{
	viz[u]=1;s[u]=a[u];
	for(vector<int>::iterator it=v[u].begin();it!=v[u].end();it++)
		if(!viz[*it])
		{
			dfs(*it);
			if(s[*it]>0)
				s[u]+=s[*it];
		}
}
int main()
{
	freopen("asmax.in","r",stdin);
	freopen("asmax.out","w",stdout);
	int n,i,x,y;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		scanf("%d",&a[i]);
	for(i=1;i<n;i++)
	{
		scanf("%d%d",&x,&y);
		v[x].push_back(y);
		v[y].push_back(x);
	}
	dfs(1);int ans=-1000000000;
	for(i=1;i<=n;i++)
		ans=max(ans,s[i]);
	printf("%d\n",ans);
	return 0;
}