Pagini recente » Cod sursa (job #2370807) | Cod sursa (job #2889107) | Cod sursa (job #2531508) | Cod sursa (job #2173888) | Cod sursa (job #2192160)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int N;
vector<int> G[16005];
int V[16005];
int Use[16005];
int Sum[16005];
void Read()
{
fin>>N;
for(int i=1;i<=N;i++)
fin>>V[i];
for(int i=1;i<N;i++)
{
int x,y;
fin>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
}
void DFS(int nod)
{
Use[nod] = 1;
Sum[nod] = V[nod];
for(int i=0;i<G[nod].size();i++)
{
int vecin = G[nod][i];
if (!Use[vecin])
{
DFS(vecin);
Sum[nod] = max(Sum[nod], Sum[vecin] + Sum[nod]);
}
}
}
int main()
{
Read();
DFS(1);
int s=-1000*16000;
for(int i=1;i<=N;i++)
if (s < Sum[i])
s = Sum[i];
fout<<s;
return 0;
}