Pagini recente » Cod sursa (job #435542) | Cod sursa (job #1166622) | Cod sursa (job #2700722) | Cod sursa (job #3214669) | Cod sursa (job #3175303)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("asmax.in");
ofstream g ("asmax.out");
const int NMAX = 1e5;
vector<int> adj[NMAX+1];
int rez[NMAX+1];
bool marked[NMAX+1];
int v[NMAX+1];
void dfs(int from){
rez[from] += v[from];
marked[from] = true;
for(int to : adj[from]){
if(!marked[to]){
dfs(to);
rez[from] = max(rez[from], rez[from] + rez[to]);
}
}
}
int main()
{
int n;
f >> n;
for(int i=1; i<=n; i++){
f >> v[i];
}
for(int i=1; i<n; i++){
int x, y;
f >> x >> y;
adj[x].push_back(y);
adj[y].push_back(x);
}
dfs(1);
int mx = -1e9;
for(int i=1; i<=n; i++)
mx = max(mx, rez[i]);
g << mx;
return 0;
}