Pagini recente » Cod sursa (job #1812806) | Cod sursa (job #764750) | Cod sursa (job #2496858) | Cod sursa (job #2838955) | Cod sursa (job #2541486)
#include <bits/stdc++.h>
#define NMAX 20000
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
vector<int> ma[NMAX];
const int oo = -(1<<30)+1;
int cost[NMAX];
int dp[NMAX];
int viz[NMAX];
int n;
int maxim;
void DFS(int n)
{
viz[n] = 1;
for(int i=0;i<ma[n].size();i++)
{
if(!viz[ma[n][i]])
{
DFS(ma[n][i]);
dp[n] = max(dp[n],max(cost[n] + dp[ma[n][i]],dp[n] + dp[ma[n][i]]));
if(dp[n] > maxim)
maxim = dp[n];
}
}
dp[n] = max(cost[n],dp[n]);
if(dp[n] > maxim)
maxim = dp[n];
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>cost[i];
}
for(int i=1;i<=n-1;i++)
{
int x,y;
fin>>x>>y;
ma[x].push_back(y);
ma[y].push_back(x);
}
for(int i=1;i<=n;i++)
{
dp[i] = oo;
}
maxim = oo;
dp[1] = cost[1];
DFS(1);
fout<<maxim;
}