Cod sursa(job #554227)

Utilizator doru.nituNitu Doru Constantin doru.nitu Data 14 martie 2011 18:06:42
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<cstdio>
#include<vector>
#include<bitset>

using namespace std;

int i,j,n,m,v[16005],ma=-200000000,ad[16005];

vector<int> a[16005];
bitset<16005> fol;

void dfs(int i)
{
	fol[i]=1;
	int sum=0;
	for(int j=0;j<a[i].size();++j)
	{
		int fiu=a[i][j];
		if(!fol[fiu])
		{
			dfs(fiu);
			ad[i]+=ad[fiu];
			if(ad[fiu]<0) sum+=ad[fiu];
		}
	}
	ad[i]+=v[i];
	ad[i]=ad[i]-sum;
	if(ad[i]>ma) ma=ad[i];
}

int main()
{
	freopen("asmax.in","r",stdin);
	freopen("asmax.out","w",stdout);
	
	scanf("%d",&n);
	
	for(i=1;i<=n;++i)
		scanf("%d",&v[i]);
	
	for(i=1;i<n;++i)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		
		a[x].push_back(y);
		a[y].push_back(x);
	}
	
	dfs(1);
	
	printf("%d\n",ma);
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
}