Pagini recente » Cod sursa (job #250554) | Cod sursa (job #1363821) | Cod sursa (job #1604724) | Cod sursa (job #1493663) | Cod sursa (job #603326)
Cod sursa(job #603326)
#include <cstdio>
#include <fstream>
#include <vector>
#include <climits>
using namespace std;
vector<int> g[16001];
bool b[16001];
int v[16001],S=INT_MIN,n;
void DF (int w){
b[w]=1;
for(vector<int>::iterator i=g[w].begin();i<g[w].end();++i)
if(!b[*i]){
DF(*i);
if(v[w]<v[w]+v[*i])
v[w]+=v[*i];
if(v[w]>S)
S=v[w];
}
if(g[w].size()==1&&v[w]>S)
S=v[w];
}
int main ()
{
ifstream f ("asmax.in");
freopen ("asmax.out","w",stdout);
f>>n;
for(int i=1;i<=n;++i)
f>>v[i];
for(int x,y,i=1;i<n;++i){
f>>x>>y;
g[x].push_back(y);
g[y].push_back(x);
}
DF(1);
printf("%d",S);
return 0;}