Pagini recente » Cod sursa (job #314570) | Cod sursa (job #563037) | Cod sursa (job #724130) | Cod sursa (job #734146) | Cod sursa (job #3138805)
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
#define NOD 16000
#define INF 16000001
int val_nod[NOD + 1];
vector<int> adj[NOD +1];
bool viz[NOD+1];
int rez[NOD + 1];
void dfs(int start){
viz[start] = 1;
rez[start] = val_nod[start];
for(auto y: adj[start]){
if(!viz[y]){
dfs(y);
if(rez[y] > 0)
rez[start] += rez[y];
}
}
}
int main()
{
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int n;
fin >> n;
for(int i = 1; i <= n; i++){
fin >> val_nod[i];
rez[i] = -INF;
}
for(int i = 0; i < n - 1; i++){
int a, b;
fin >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a);
}
dfs(1);
int maxi = -INF;
for(int i = 1; i <= n; i++){
if(maxi < rez[i])
maxi = rez[i];
}
fout << maxi;
fin.close();
fout.close();
return 0;
}