Pagini recente » Cod sursa (job #1522569) | Cod sursa (job #3204787) | Cod sursa (job #2254556) | Cod sursa (job #643048) | Cod sursa (job #1443695)
#include <fstream>
#include <vector>
#include <limits>
using namespace std;
const int nmax = 16002;
vector<int> G[nmax];
int visited[nmax];
int cost[nmax];
void dfs(int u)
{
visited[u] = true;
for (auto v = G[u].begin(); v != G[u].end(); ++v)
if (!visited[*v])
{
dfs(*v);
if (cost[*v] > 0)
cost[u] += cost[*v];
}
}
int main()
{
int n;
ifstream in("asmax.in");
ofstream out("asmax.out");
in >> n;
for (int i = 1; i <= n; ++i)
in >> cost[i];
for (int i = 1; i < n; ++i)
{
int u, v;
in >> u >> v;
G[u].push_back(v);
G[v].push_back(u);
}
dfs(1);
int rez = numeric_limits<int>::min();
for (int i = 1; i <= n; ++i)
rez = max(rez, cost[i]);
out << rez << '\n';
return 0;
}