Pagini recente » Cod sursa (job #368111) | Cod sursa (job #311983) | Cod sursa (job #3036998) | Cod sursa (job #920355) | Cod sursa (job #3327664)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
void dfs(int nod,const vector<vector<int>>&graf,vector<int>&dp,vector<bool>&vizitat,vector<int>&V){
vizitat[nod]=true;
dp[nod]=V[nod];
for(int vecin:graf[nod]){
if(!vizitat[vecin]){
dfs(vecin,graf,dp,vizitat,V);
if(dp[vecin]>0)
dp[nod]+=dp[vecin];
}
}
}
int main(){
int n;
in>>n;
vector<vector<int>>graf(n+1);
vector<bool>vizitat(n+1,false);
vector<int>dp(n+1,0);
vector<int>V(n+1);
int cost;
int x,y;
for(int i=1;i<=n;i++){
in>>cost;
V[i]=cost;
}
for(int i=1;i<n;i++){
in>>x>>y;
graf[x].push_back(y);
graf[y].push_back(x);
}
dfs(1,graf,dp,vizitat,V);
int maxi=V[1];
for(int i=1;i<=n;i++){
if(dp[i]>maxi)
maxi=dp[i];
}
out<<maxi;
}