Pagini recente » Cod sursa (job #745534) | Cod sursa (job #1743623) | Cod sursa (job #2303279) | Cod sursa (job #71807) | Cod sursa (job #1615435)
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
const int nmax = 16050;
int maxim=-1<<30;
int av[nmax], val[nmax];
bool ver[nmax];
vector <int> graf[nmax];
void parc(int nod){
av[nod] = val[nod];
ver[nod] = true;
for(int i = 0; i < graf[nod].size(); ++i){
if(!ver[ graf[nod][i] ]){
parc(graf[nod][i]);
if(av[ graf[nod][i] ] > 0)
av[nod] += av[ graf[nod][i] ];
}
}
if(av[nod] > maxim)
maxim = av[nod];
}
int n;
int main()
{
f>>n;
for(int i = 1; i <= n; ++i){
f>>val[i];
}
for(int i = 1, x, y; i < n; ++i){
f>>x>>y;
graf[x].push_back(y);
graf[y].push_back(x);
}
parc(1);
g<<maxim<<'\n';
return 0;
}