Cod sursa(job #1554746)

Utilizator SilviuIIon Silviu SilviuI Data 21 decembrie 2015 18:04:56
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>
#include <algorithm>
#include <vector>
#define nmax 16010
using namespace std;

int n,i,j,sol,x,y;
int dp[nmax],t[nmax];
vector <int> g[nmax];
bool fr[nmax];
//dp[nod] suma valorilor din suboarbele lui nod;
int memo(int nod,int tata)
{
	if (fr[nod]) return dp[nod];
	fr[nod]=true; int value=0;
	for (unsigned int i=0;i<g[nod].size();i++)
	    if (g[nod][i]!=tata && !fr[g[nod][i]]) value+=memo(g[nod][i],nod);
	if (value+t[nod]>0) dp[nod]=value+t[nod]; else dp[nod]=0; 
	if (dp[nod]>0) sol=max(sol,dp[nod]); 
	return dp[nod];
}

int main() {
	freopen("asmax.in","r",stdin);
	freopen("asmax.out","w",stdout);
	scanf("%d",&n); sol=-999999999;
	for (int i=1;i<=n;i++) scanf("%d",&t[i]),sol=max(sol,t[i]);
	for (int i=1;i<=n-1;i++) {
		scanf("%d %d",&x,&y);
		g[x].push_back(y); g[y].push_back(x);
	}
	memo(1,0); 
	printf("%d\n",sol);
	return 0;
}