Pagini recente » Cod sursa (job #582157) | Cod sursa (job #1062364) | Cod sursa (job #825768) | Cod sursa (job #1882321) | Cod sursa (job #3262869)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream input("asmax.in");
ofstream output("asmax.out");
int DFS(vector<vector<int>> &adj, vector<int> &values, vector<int> &DP, int node, vector<bool> &visited)
{
visited[node] = true;
int sum = values[node];
for(int i = 0; i < adj[node].size(); i++){
if(visited[adj[node][i]]){
continue;
}
int temp;
temp = DFS(adj, values, DP, adj[node][i], visited);
if(temp > 0){
sum += temp;
}
}
DP[node] = sum;
return sum;
}
int main()
{
int N;
input >> N;
vector<int> values(N+1);
for(int i = 1; i <= N; i++){
input >> values[i];
}
vector<vector<int>> adj(N+1, vector<int>());
for(int i = 0; i < N-1; i++){
int a, b;
input >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a);
}
vector<int> DP(N+1, 0);
vector<bool> visited(N+1, 0);
DFS(adj, values, DP, 1, visited);
int maxim = -(1 << 29);
for(int i = 1; i <= N; i++){
maxim = max(maxim, DP[i]);
}
output << maxim;
return 0;
}