Pagini recente » Cod sursa (job #30017) | Cod sursa (job #1426457) | Cod sursa (job #3167080) | Cod sursa (job #126334) | Cod sursa (job #1196756)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream is("asmax.in");
ofstream os("asmax.out");
int N, x, y;
vector <vector<int> > V;
vector <int> C;
bool Vis[16001];
long long bestsum(-99999999), sum[16001];
void DFS(int nod);
int main()
{
is >> N;
V.resize(N+1);
C.resize(N+1);
for ( int i = 1; i <= N; ++i )
{
is >> x;
C[i] = x;
}
for ( int i = 1; i <= N-1; ++i )
{
is >> x >> y;
V[x].push_back(y);
V[y].push_back(x);
}
DFS(1);
os << bestsum;
is.close();
os.close();
}
void DFS(int nod)
{
Vis[nod] = true;
sum[nod] = C[nod];
for ( int i = 0; i < V[nod].size(); ++i )
{
if ( Vis[V[nod][i]] == false )
{
DFS(V[nod][i]);
sum[nod] = max(sum[V[nod][i]] + sum[nod], sum[nod]);
if ( sum[nod] > bestsum )
bestsum = sum[nod];
}
}
}