Pagini recente » Cod sursa (job #1266917) | Cod sursa (job #3262109) | Cod sursa (job #2842611) | Cod sursa (job #842923) | Cod sursa (job #2379893)
#include <bits/stdc++.h>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int NMAX = 16001;
struct nod {
int val;
vector<int> A;
};
nod M[NMAX];
int N, ma,
dp[NMAX]; /// dp[i] -> suma subarborelui cu radacina in i;
bool v[NMAX];
int dfs(const int& i) {
dp[i] = M[i].val;
v[i] = 1;
for(const auto& vec: M[i].A)
if(!v[vec]) {
int c = dfs(vec);
if(c > 0) dp[i] += c;
}
return dp[i];
}
int main()
{
in >> N;
for(int i = 1; i <= N; i++)
in >> M[i].val;
int x, y;
for(int i = 1; i < N; i++) {
in >> x >> y;
M[x].A.push_back(y);
M[y].A.push_back(x);
}
dfs(1);
for(int i = 1; i <= N; i++)
ma = max(dp[i], ma);
out << ma << '\n';
return 0;
}