Pagini recente » Cod sursa (job #1158384) | Cod sursa (job #1294173) | Cod sursa (job #816171) | Cod sursa (job #998601) | Cod sursa (job #2682815)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int n,cost[16010],d[16010],i,a,b,x,y,viz[16010],maxi;
vector<int>v[16010];
/*struct cmp amintire
{
bool operator()(int x,int y)
{
return d[x]<d[y];
}
};
priority_queue<int,vector<int>,cmp>q;
*/
void rec(int nod)
{
viz[nod]=1;
if(v[nod].size())
for(auto it:v[nod])
if(!viz[it])
{
rec(it);
viz[it]=1;
d[nod]=max(0,max(d[nod],d[nod]+d[it]));
}
d[nod]=max(d[nod],0);
}
int main()
{
fin>>n;
for(i=1; i<=n; i++)
fin>>cost[i], d[i]=cost[i];
for(i=1; i<n; i++)
{
fin>>a>>b;
v[a].push_back(b);
v[b].push_back(a);
}
viz[1]=1;
rec(1);
/*while(!q.empty()) amintire
{
y=q.top();
q.pop();
for(auto it:v[y])
{
x=it;
if(d[x]<d[x]+d[y] && d[x]+d[y]>=0)
{
d[x]+=d[y];
q.push(x);
}
else if(d[x]<0)
d[x]=0,q.push(x);
}
}
*/
for(i=1; i<=n; i++)
maxi=max(d[i],maxi);
fout<<maxi;
return 0;
}