Pagini recente » Cod sursa (job #2354775) | Cod sursa (job #1467940) | Cod sursa (job #1377920) | Cod sursa (job #2405145) | Cod sursa (job #1998911)
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
const int nmax=16005;
vector<int> g[nmax];
int d[nmax],v[nmax],n,maxim,smax=-16000006;
bool viz[nmax];
inline int max(int a,int b)
{
if(a>b)
return a;
return b;
}
inline void dfs(int node)
{
viz[node]=1;
int i,currnode;
for(i=0;i<g[node].size();++i)
{
currnode=g[node][i];
if(viz[currnode])
continue;
dfs(currnode);
d[node]=max(d[node],max(d[node]+d[currnode],d[currnode]+v[node]));
}
if(d[node]>smax)
smax=d[node];
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
int i,x,y;
scanf("%d",&n);
for(i=1;i<=n;++i)
scanf("%d",&v[i]),d[i]=v[i];
for(i=1;i<n;++i)
{
scanf("%d%d",&x,&y);
g[x].push_back(y);
g[y].push_back(x);
}
dfs(1);
printf("%d",smax);
}