Pagini recente » Cod sursa (job #3221356) | Cod sursa (job #1554765) | Cod sursa (job #171142) | Cod sursa (job #457953) | Cod sursa (job #672099)
Cod sursa(job #672099)
#include<cstdio>
#include<vector>
using namespace std;
int n,x,y,i,sol=1<<31,value[16015],visited[16015];
vector<int> G[16015];
void read(),solve(),dfs(int);
int main()
{
read();
solve();
return 0;
}
void read()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++){scanf("%d",&value[i]);if(sol<value[i])sol=value[i];}
for(i=1;i<n;i++){scanf("%d%d",&x,&y);G[x].push_back(y);}
}
void solve()
{
for(i=1;i<=n;i++)
{
if(!visited[i])
dfs(i);
}
printf("%d\n",sol);
}
void dfs(int node)
{
visited[node]=1;
for(vector<int>::iterator it=G[node].begin();it!=G[node].end();it++)
{
if(!visited[*it])dfs(*it);
if(value[*it]>0)value[node]+=value[*it];
}
if(sol<value[node])sol=value[node];
}