Pagini recente » Cod sursa (job #3039613) | Cod sursa (job #576963) | Cod sursa (job #1294720) | Cod sursa (job #1573161) | Cod sursa (job #1885872)
#include <stdio.h>
#include <vector>
#define N 16005
using namespace std;
vector<int> graf[N];
int n,i,a,b,bst;
int d[N],v[N];
bool viz[N];
int dfs(int x)
{
int sum=v[x],i,aux;
if(viz[x])
return d[x];
viz[x]=true;
for(i=0;i<graf[x].size();i++)
{
aux=dfs(graf[x][i]);
if(aux>0)
sum+=aux;
}
d[x]=sum;
return sum;
}
int main()
{
FILE *f1,*f2;
f1=fopen("asmax.in","r");
f2=fopen("asmax.out","w");
fscanf(f1,"%d",&n);
for(i=1;i<=n;i++)
fscanf(f1,"%d",&v[i]);
for(i=1;i<n;i++)
{
fscanf(f1,"%d%d",&a,&b);
graf[a].push_back(b);
}
for(i=1;i<=n;i++)
if(!viz[i])
dfs(i);
bst=-9999;
for(i=1;i<=n;i++)
if(d[i]>bst)
bst=d[i];
fprintf(f2,"%d",bst);
return 0;
}