Pagini recente » Borderou de evaluare (job #2226080) | Borderou de evaluare (job #1503611) | Borderou de evaluare (job #903460) | Borderou de evaluare (job #3114629) | Cod sursa (job #2133210)
#include <bits/stdc++.h>
#define INFILE "asmax.in"
#define OUTFILE "asmax.out"
using namespace std;
ifstream in(INFILE);
ofstream out(OUTFILE);
int N;
map<int,int> val;
vector<int> valTree;
struct Graph{
vector<vector<int>> Adj;
int N;
void init(int N){
this->N=N;
Adj.resize(N+1);
}
void Add(int x,int y){
Adj[x].push_back(y);
Adj[y].push_back(x);
}
}G;
void Read(){
in>>N;
G.init(N);
valTree.resize(N+1);
for(int i=1;i<=N;i++){
int x;
in>>x;
val[i]=x;
}
for(int i=1;i<=N-1;i++){
int x,y;
in>>x>>y;
G.Add(x,y);
}
}
void DFS(int x,bool viz[]){
valTree[x]=val[x];
viz[x]=true;
for(auto y:G.Adj[x]){
if(!viz[y]){
DFS(y,viz);
if(valTree[y]>0)
valTree[x]+=valTree[y];
}
}
}
void Determinare(){
bool viz[N+1];
memset(viz,false,sizeof(viz));
DFS(1,viz);
int Max=valTree[1];
for(int i=2;i<=N;i++)
Max=max(Max,valTree[i]);
out<<Max;
}
int main()
{
Read();
Determinare();
return 0;
}