Pagini recente » Cod sursa (job #2112755) | Cod sursa (job #1515935) | Cod sursa (job #895800) | Cod sursa (job #1586636) | Cod sursa (job #1502316)
#include <fstream>
#include <vector>
using namespace std;
const int LIM=16001;
ifstream cin("asmax.in");
ofstream cout("asmax.out");
int n, val[LIM], dp[LIM];
vector <int> arb[LIM];
char viz[LIM];
void dfs(int nod)
{
viz[nod]=1;
int sum=0;
for(int i=0; i<arb[nod].size(); ++i)
if(!viz[ arb[nod][i] ])
{
dfs(arb[nod][i]);
if(dp[ arb[nod][i] ]>0) sum+=dp[ arb[nod][i] ];
}
dp[nod]=val[nod];
if(dp[nod]<sum+val[nod]) dp[nod]=sum+val[nod];
}
int main()
{
cin>>n;
for(int i=1; i<=n; ++i)
cin>>val[i];
for(int i=1; i<n; ++i)
{
int x, y;
cin>>x>>y;
arb[x].push_back(y);
arb[y].push_back(x);
}
dfs(1);
cout<<dp[1];
return 0;
}