Pagini recente » Cod sursa (job #496832) | Cod sursa (job #579473) | Cod sursa (job #815994) | Cod sursa (job #367471) | Cod sursa (job #946243)
Cod sursa(job #946243)
#include <fstream>
#include <vector>
#include <algorithm>
#define oo (1<<30)
using namespace std;
ifstream in("asmax.in"); ofstream out("asmax.out");
vector <int> l[10002];
int v[16002],start,x,y,n;
int best[16002],b,s;
bool viz[16002];
void dfs(int x){
vector <int> :: iterator it=l[x].begin();
best[x]=v[x];
viz[x]=true;
for(;it!=l[x].end();++it){
if(!viz[(*it)]){
dfs((*it));
best[x]=max(best[x],best[x]+best[(*it)]);
}
}
}
int main(){
in>>n>>v[1]; start=v[1]; s=1;
for(int i=2;i<=n;++i) {in>>v[i]; if(v[i]>start) start=v[i],s=i;}
for(int i=1;i<n;++i ) {in>>x>>y; l[x].push_back(y); l[y].push_back(x);}
b=-oo;
dfs(s);
for(int i=1;i<=n;++i) if(b<best[i]) b=best[i];
out<<b<<'\n';
return 0;
}