Pagini recente » Cod sursa (job #3227620) | Cod sursa (job #2298363) | Cod sursa (job #2903005) | Cod sursa (job #2470320) | Cod sursa (job #2461744)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
std::ifstream in("asmax.in");
std::ofstream out("asmax.out");
std::vector<int>v[16001];
int valori[16001];
bool viz[16001];
int suma[16001];
void dfs(int x){
suma[x]=valori[x];
viz[x]=1;
for(int y:v[x]){
if(!viz[y])
dfs(y);
suma[x]=std::max(suma[x],suma[x]+valori[y]);
}
}
int main(){
int n;
in>>n;
for(int i=1;i<=n;i++)
in>>valori[i];
for(int i=1,x,y;i<n;i++)
in>>x>>y,v[x].push_back(y),v[y].push_back(x);
for(int i=1;i<=n;i++)
if(!viz[i])
dfs(i);
for(int i=1;i<=n;i++)
std::cout<<suma[i]<<" ";
out<<*std::max_element(suma+1,suma+n+1);
return 0;
}