Pagini recente » Monitorul de evaluare | Cod sursa (job #3366108) | Cod sursa (job #3366109) | Cod sursa (job #3367292) | Cod sursa (job #3366106)
#include <bits/stdc++.h>
using namespace std;
const int nm=16005;
vector<vector<int>> v;
int ver[nm], dp[nm], val[nm], grad[nm];
void dfs(int x)
{
ver[x]=1;
for(auto i:v[x])
{
if(ver[i]==0)
{
dfs(i);
if(dp[i]>0)
dp[x]+=dp[i];
}
}
}
int main()
{
ifstream cin("asmax.in");
ofstream cout("asmax.out");
int n, a, b, maxx=0;
cin>>n;
v.resize(n+1);
for(int i=1; i<=n; i++)
cin>>val[i];
for(int i=1; i<n; i++)
{
cin>>a>>b;
v[a].push_back(b);
v[b].push_back(a);
grad[a]++;
grad[b]++;
}
for(int i=1; i<=n; i++)
{
if(grad[i]==1)
dp[i]=val[i];
}
dfs(1);
for(int i=1; i<=n; i++)
maxx=max(maxx, dp[i]);
cout<<maxx;
return 0;
}