Pagini recente » Cod sursa (job #3039645) | Cod sursa (job #362087) | Cod sursa (job #1409705) | Cod sursa (job #150672) | Cod sursa (job #1782270)
#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()
{
in>>n;
for(int i=1;i<=n;i++)
{
in>>val[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[1]=1;
out<<solve(1);
}