Pagini recente » Cod sursa (job #693213) | Cod sursa (job #547695) | Cod sursa (job #3252970) | Cod sursa (job #1785781) | Cod sursa (job #1822335)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
const int Nmax=16005;
int Use[Nmax],V[Nmax],Smax[Nmax],N,Sol;
vector <int> X[Nmax];
void Read()
{
fin>>N;
for(int i=1;i<=N;++i)
fin>>V[i];
for(int i=1;i<=N-1;++i)
{
int x,y;
fin>>x>>y;
X[x].push_back(y);
X[y].push_back(x);
}
}
void DFS(int Nod)
{
Use[Nod]=1;
Smax[Nod]=V[Nod];
for(int i=0;i<(int)X[Nod].size();++i)
{
int Vecin=X[Nod][i];
if(!Use[Vecin])
{
DFS(Vecin);
Smax[Nod]=max(Smax[Nod],Smax[Nod]+Smax[Vecin]);
}
}
Sol=max(Sol,Smax[Nod]);
}
void Print()
{
fout<<Sol<<"\n";
}
int main()
{
Read(); DFS(1); Print();
return 0;
}