Pagini recente » Cod sursa (job #353899) | Cod sursa (job #2144041) | Cod sursa (job #1191492) | Cod sursa (job #2115151) | Cod sursa (job #2056203)
#include <fstream>
#include <vector>
#define NMAX 16010
#define INF 1010
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int n, v[NMAX], maxim = -INF, dp[NMAX], sol = -INF;
bool pozitiv, viz[NMAX];
vector<int> A[NMAX];
void dfs(int nod);
int main()
{
int i, a, b;
fin >> n;
for (i = 1; i <= n; i++)
{
fin >> v[i];
if (v[i] >= 0)
pozitiv = true;
if (v[i] > maxim)
maxim = v[i];
}
if (!pozitiv)
{
fout << maxim << '\n';
fout.close();
return 0;
}
for (i = 1; i < n; i++)
{
fin >> a >> b;
A[a].push_back(b);
A[b].push_back(a);
}
dfs(1);
fout << sol << '\n';
fout.close();
return 0;
}
void dfs(int nod)
{
int i, urm;
viz[nod] = true;
for (i = 0; i < A[nod].size(); i++)
{
urm = A[nod][i];
if (!viz[urm])
{
dfs(urm);
dp[nod] += max(dp[urm], 0);
}
}
dp[nod] += v[nod];
if (dp[nod] > sol)
sol = dp[nod];
}