Cod sursa(job #1899271)

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

using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int N,dp[16001],sum[16001],rs=-1e9;
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;
	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 (V[x][i]!=source) {
			psum+=dp[V[x][i]]+sum[V[x][i]];
			//if (!isleaf[V[x][i]])
		}
	}
	dp[x]=psum;
	rs=max(rs,dp[x]);
	
}
int main(){
	fin >>N;
	for (int i=1;i<=N;i++) fin >>dp[i],sum[i]=dp[i],dp[i]=0;
	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;
}