Pagini recente » Borderou de evaluare (job #1273027) | Diferente pentru problema/aliniere intre reviziile 87 si 14 | Cod sursa (job #1363980)
#include <stdio.h>
#include <vector>
int val[16001];
int fin[16001];
bool vis[16001];
std::vector<int>adj[16001];
int n,maxim=-10000;
void dfs(int nod,int t)
{
if(vis[nod]==0)
{
vis[nod]=1;
std::vector<int>::iterator it;
for(it=adj[nod].begin();it!=adj[nod].end();++it)
{
if(vis[*it]==0) dfs(*it,nod);
if(val[*it]>0&&*it!=t) val[nod]+=val[*it];
}
}
if(maxim<val[nod]) maxim=val[nod];
}
int main()
{
freopen ("asmax.in","r",stdin);
freopen ("asmax.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&val[i]);
}
int p1,p2;
for(int i=1;i<n;i++)
{
scanf("%d%d",&p1,&p2);
adj[p1].push_back(p2);
adj[p2].push_back(p1);
}
for(int i=1;i<=n;i++)
{
dfs(i,0);
}
printf("%d\n",maxim);
}