Pagini recente » Cod sursa (job #1710532) | Cod sursa (job #305928) | Cod sursa (job #1369044) | Cod sursa (job #1881029) | Cod sursa (job #2830757)
#include <fstream>
#include <queue>
#include <vector>
#include <climits>
using namespace std;
vector <vector <int>> adList;
vector <bool> viz;
vector <int> costs;
int dfs(int start, int &maxSum){
int treeSum = costs[start];
viz[start] = true;
unsigned int sz = adList[start].size();
for(unsigned int i = 0; i < sz; ++i){
int neighbour = adList[start][i];
if(!viz[neighbour]){
int subtreeSum = dfs(neighbour, maxSum);
if(subtreeSum > 0){
treeSum = treeSum + subtreeSum;
}
}
}
maxSum = max(maxSum, treeSum);
return treeSum;
}
int main() {
ifstream f("asmax.in");
ofstream g("asmax.out");
int n, sumMax;
f >> n;
viz.resize(n + 1, false);
costs.resize(n + 1);
adList.resize(n + 1);
for(int i = 1; i <= n; ++i){
f >> costs[i];
}
for(int i = 1; i < n; ++i){
int x, y;
f >> x >> y;
adList[x].push_back(y);
adList[y].push_back(x);
}
sumMax = -INT_MAX;
dfs(1, sumMax);
g << sumMax;
return 0;
}