Pagini recente » Cod sursa (job #2035357) | Cod sursa (job #1081849) | Istoria paginii runda/left-oji | ioi_bil_c1 | Cod sursa (job #2764499)
#include <bits/stdc++.h>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
int n,t[16005],v[16005],best[16005],rad;
vector<int>f[16005];
void citire()
{
in >> n;
for (int i = 1; i <= n; i++)
{
in >> v[i];
best[i] = v[i];
}
for (int i = 1; i < n; i++)
{
int x,y;
in >> x >> y;
t[y] = x;
f[x].push_back(y);
}
for (int i = 1; i <= n; i++)
if (t[i] == 0)
rad = i;
}
int rec(int p)
{
for (int i = 0; i < f[p].size(); i++)
{
if (best[p] >= v[p])
best[p] += max(0,rec(f[p][i]));
else
best[p] = v[p];
}
return best[p];
}
void fin()
{
int maxim = -1e9;
for (int i = 1; i <= n; i++)
if (best[i] > maxim)
maxim = best[i];
if (maxim == 0)
{
maxim = -1e3;
for (int i = 1; i <= n; i++)
if (v[i] > maxim)
maxim = v[i];
}
out << maxim;
}
int main()
{
citire();
rec(rad);
fin();
return 0;
}