Pagini recente » Cod sursa (job #563396) | Cod sursa (job #2306636) | Cod sursa (job #906286) | Cod sursa (job #1210262) | Cod sursa (job #2703677)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("asmax.in");
ofstream fout ("asmax.out");
vector<int> v[16001];
int s[16001];
bool viz[16001];
int reztotal = - 1001;
void DFS(int nod){
viz[nod] = 1;
for(int i=0; i < v[nod].size(); i++){
int x = v[nod][i];
if(!viz[x]){
DFS(x);
if(s[x] > 0){
s[nod] += s[x];
}
}
}
reztotal = max(reztotal, s[nod]);
}
int main()
{
int n, x, y;
fin>>n;
for(int i=1; i<=n; i++){
fin>>s[i];
}
for(int i=1; i<n; i++){
fin>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
DFS(1);
fout<<reztotal;
}