Pagini recente » Borderou de evaluare (job #1569317) | Cod sursa (job #1311715) | Cod sursa (job #2907073) | Cod sursa (job #1112909) | Cod sursa (job #1860557)
#include <iostream>
#include <fstream>
#include <vector>
#define NMAX 16005
using namespace std;
ifstream fin ("asmax.in");
ofstream fout ("asmax.out");
int n, dp[NMAX], mmax = -1005;
bool viz[NMAX];
vector <int> fii[NMAX];
void dfs (int node) {
viz[node] = 1;
for (int i = 0; i < fii[node].size(); ++i) {
if (!viz[fii[node][i]]) {
dfs(fii[node][i]);
dp[node] = max(dp[node], dp[node] + dp[fii[node][i]]);
if (dp[node] > mmax) {
mmax = dp[node];
}
}
}
}
int main ()
{
fin >> n;
for (int i = 1; i <= n; ++i) {
fin >> dp[i];
}
int x, y;
for (int i = 1; i < n; ++i) {
fin >> x >> y;
fii[x].push_back(y);
fii[y].push_back(x);
}
dfs(1);
fout << mmax;
return 0;
}