Pagini recente » Cod sursa (job #857110) | Cod sursa (job #2015625) | Cod sursa (job #315743) | Cod sursa (job #488615) | Cod sursa (job #3352553)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
void dfs(int v,
const vector<vector<int>> &adj,
const vector<int> &val,
vector<int> &parent,
vector<int> &dp)
{
for (int gyerek : adj[v])
if (gyerek != parent[v]) {
parent[gyerek] = v;
dfs(gyerek, adj, val, parent, dp);
}
dp[v] = val[v];
for (int gyerek : adj[v])
if (gyerek != parent[v] && dp[gyerek] > 0)
dp[v] += dp[gyerek];
}
int main()
{
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int n;
fin >> n;
vector<int> val(n+1, 0);
for (int i = 1; i <= n; i++)
fin >> val[i];
vector<vector<int>> adj(n+1);
for (int i = 1; i <= n-1; i++) {
int a,b;
fin >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a);
}
vector<int> parent(n+1, -1);
vector<int> dp(n+1);
dfs(1, adj, val, parent, dp);
int sol = dp[1];
for (int i = 2; i <= n; i++)
if (dp[i] > sol)
sol = dp[i];
fout << sol << endl;
return 0;
}