Cod sursa(job #1899255)

Utilizator cyber_ghSoltan Gheorghe cyber_gh Data 2 martie 2017 16:53:16
Problema Asmax Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int N,dp[16001],sum[16001],rs;
bool isleaf[16001];
vector <int> V[16001];
void dfs(int x,int source){
	if (V[x].size()==1 && V[x][0]==source){
		isleaf[x]=1;
		dp[x]=sum[x];
		return ;
	}
	for (int i=0;i<V[x].size();i++){
	if (V[x][i]==source) continue;
	dfs(V[x][i],x);
	}
	int psum=0;
	for (int i=0;i<V[x].size();i++){
		 if (source!=V[x][i]){
			 psum+=dp[V[x][i]];
			if (!isleaf[V[x][i]])psum+=sum[V[x][i]];
			}
	}
	//psum+=sum[x];
	dp[x]=psum;
	rs=max(rs,psum);
	
}

int main(){
	fin >>N;
	for (int i=1;i<=N;i++) fin >>sum[i];
	for (int i=1;i<N;i++){
		int x,y;
		fin >>x>>y;
		V[x].push_back(y);
		V[y].push_back(x);
	}
	dfs(1,0);
	fout <<rs<<endl;
	//for (int i=1;i<=N;i++) cout <<dp[i]<<" ";
	
	return 0;
}