Pagini recente » Cod sursa (job #236388) | Cod sursa (job #2556021) | Cod sursa (job #2810801) | Cod sursa (job #1309421) | Cod sursa (job #2780208)
#include <fstream>
#include <vector>
using namespace std;
const int N = 16005;
const int INF = (1 << 30);
vector<int> gr[N];
int val[N], dp[N];
bool viz[N];
void dfs(int nod) {
viz[nod] = true;
dp[nod] = val[nod];
for (auto vec : gr[nod])
if (!viz[vec]) {
dfs(vec);
dp[nod] = max(dp[nod], dp[nod] + dp[vec]);
}
}
int main() {
ifstream cin("asmax.in");
ofstream cout("asmax.out");
int n;
cin >> n;
for (int i = 1; i <= n; ++i)
cin >> val[i];
for (int i = 0; i < n - 1; ++i) {
int x, y;
cin >> x >> y;
gr[x].push_back(y);
gr[y].push_back(x);
}
cin.close();
dfs(1);
int maxi = -INF;
for (int i = 1; i <= n; ++i)
maxi = max(maxi, dp[i]);
cout << maxi << "\n";
cout.close();
return 0;
}