Pagini recente » Cod sursa (job #3185954) | Cod sursa (job #150570) | Cod sursa (job #2544611) | Cod sursa (job #2614265) | Cod sursa (job #2916290)
#include <fstream>
#include <vector>
#include <algorithm>
#define NMAX 16000
using namespace std;
ifstream fin ("asmax.in");
ofstream fout ("asmax.out");
vector <int> L[NMAX+3];
int n, x, y;
int cost[NMAX+5];
int D[NMAX+5];///D[nod]=suma maxima a unui subarbore care are radacina in nod
int viz[NMAX+2];
int sol=-1010;
void dfs(int nod)
{
viz[nod]=1;
D[nod]=cost[nod];
for(int i=0; i<L[nod].size(); i++)
{
int vecin=L[nod][i];
if(viz[vecin]==0)
{
dfs(vecin);
D[nod]+=max(0, D[vecin]);
}
}
sol=max(sol, D[nod]);
}
int main ()
{
fin>>n;
for(int i=1; i<=n; i++)
fin>>cost[i];
for(int i=1; i<=n-1; i++)
{
fin>>x>>y;
L[x].push_back(y);
L[y].push_back(x);
}
dfs(1);
fout<<sol;
return 0;
}