Pagini recente » Cod sursa (job #394174) | Cod sursa (job #1555333) | Cod sursa (job #3266164) | Cod sursa (job #2353773) | Cod sursa (job #2825283)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
int n,Smax=-1000,start;
int val[16001];
bool vizitat[16001];
vector <int> vecini[16001];
int DFS(int start){
if(vizitat[start]==0){
vizitat[start]=1;
int suma_copii=0;
for(int i=0;i<int(vecini[start].size());i++){
int vecin=vecini[start][i];
if(vizitat[vecin]==0){
int suma_copil=DFS(vecin);
if(suma_copil>=0){
suma_copii+=suma_copil;
}
}
}
if(val[start]+suma_copii>Smax){
Smax=val[start]+suma_copii;
}
return val[start]+suma_copii;
}
}
int main()
{
f>>n;
start=0;
val[start]=-1001;
for(int i=1;i<=n;i++){
f>>val[i];
}
for(int i=1;i<=n;i++){
if(val[i]>val[start]){
start=i;
}
}
for(int i=1;i<n;i++){
int a,b;
f>>a>>b;
vecini[a].push_back(b);
vecini[b].push_back(a);
}
DFS(start);
g<<Smax;
return 0;
}