Pagini recente » Cod sursa (job #2670249) | Cod sursa (job #1993263) | Cod sursa (job #1720159) | Monitorul de evaluare | Cod sursa (job #1782275)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int NMAX = 16000;
int val[NMAX+1];
int f[NMAX];
vector <int> Arb[NMAX+1];
deque <int> Q;
int n;
int solve(int x)
{
int p=0,sum=0;
sum+=val[x];
for(int i=0;i<Arb[x].size();i++)
{
if(f[Arb[x][i]]==0)
{
f[Arb[x][i]]=1;
Q.push_back(Arb[x][i]);
p++;
}
}
for(int i=1;i<=p;i++)
{
int k;
k=Q.back();
Q.pop_back();
int m=solve(k);
if(m>=0)
sum+=m;
}
return sum;
}
int main()
{
int maxim=-99999,imax;
in>>n;
for(int i=1;i<=n;i++)
{
in>>val[i];
if(val[i]>=maxim)
{
maxim=val[i];
imax=i;
}
}
for(int i=1;i<n;i++)
{
int x,y;
in>>x>>y;
Arb[x].push_back(y);
Arb[y].push_back(x);
}
f[imax]=1;
out<<solve(imax);
}