Pagini recente » Cod sursa (job #2983690) | Cod sursa (job #1446451) | Cod sursa (job #99565) | Cod sursa (job #2565282) | Cod sursa (job #961147)
Cod sursa(job #961147)
#include <fstream>
#include <limits.h>
#include <vector>
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
int n,v[16011];
bool ver[16011];
int s[16011],maxim=INT_MIN;
vector<int> L[16011];
void dfs(int nod){
ver[nod]=true;
// s[nod]=v[nod];
int sumafii = 0;
for(register int i=0;i<L[nod].size();i++){
if(!ver[L[nod][i]]){
dfs(L[nod][i]);
sumafii+=(s[L[nod][i]]>0?s[L[nod][i]]:0);
}
}
s[nod] = (sumafii +v[nod]> v[nod] ? sumafii+v[nod] : v[nod]);
if(s[nod]>maxim)
maxim=s[nod];
}
int main(){
register int i,j,x,y;
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
for(i=1;i<n;i++){
f>>x>>y;
L[x].push_back(y);
L[y].push_back(x);
}
dfs(1);
g<<maxim;
return 0;
}