Cod sursa(job #1148958)

Utilizator irinaneaguIrina Neagu irinaneagu Data 21 martie 2014 12:50:29
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<cstdio>
int viz[16001],sum,smax=-9999999,n,m,vf[32002],urm[32001],lst[16002],val[16001];
inline void adauga(int x,int y){
    m++;
    vf[m]=y;
    urm[m]=lst[x];
    lst[x]=m;
}
void dfs(int x){
    int y,p;
    viz[x]=1;
    p=lst[x];
    while(p!=0){
        y=vf[p];
        if(viz[y]==0){
            dfs(y);
            if(val[y]>0)
                val[x]+=val[y];
            }
        p=urm[p];
    }
    //val[x] = sum;
    if(val[x]>smax)
            smax=val[x];
}
int main(){
    freopen("asmax.in","r",stdin);
    freopen("asmax.out","w",stdout);
    int x,y,i;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&val[i]);
    for(i=1;i<n;i++){
        scanf("%d%d",&x,&y);
        adauga(x,y);
        adauga(y,x);
    }
    dfs(1);
    printf("%d",smax);
    return 0;
}