Pagini recente » Cod sursa (job #933529) | Cod sursa (job #56935) | Cod sursa (job #2279191) | Cod sursa (job #1138774) | Cod sursa (job #2922647)
#include <fstream>
#include <vector>
#include <deque>
#define ll long long
using namespace std;
ifstream cin ("asmax.in ");
ofstream cout ("asmax.out");
struct element
{
ll value,father;
ll dp;
ll out;
};
vector <element> x;
ll n,m,a,i,j,b;
deque<ll> v;
void BFS()
{
ll curr;
while (!v.empty())
{
curr=v[0];
v.pop_front();
x[x[curr].father].out--;
if (x[curr].dp>0) x[x[curr].father].dp+=x[curr].dp;
if (x[x[curr].father].out==0) v.push_back(x[curr].father);
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin>>n;
x.resize(n+1);
for (i=1;i<=n;++i)
{
cin>>x[i].value;
x[i].dp=x[i].value;
}
for (i=1;i<n;++i)
{
cin>>a>>b;
x[b].father=a;
x[a].out++;
}
for (i=1;i<=n;++i) if (x[i].out==0) v.push_back(i);
BFS();
ll maxi=-999999;
for (i=1;i<=n;++i)
{
//cout<<i<<": "<<x[i].dp<<"\n";
if (x[i].dp>maxi) maxi=x[i].dp;
}
cout<<maxi<<"\n";
}