Cod sursa(job #1882814)

Utilizator ASTELOTudor Enescu ASTELO Data 17 februarie 2017 15:13:40
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int v[16001],sum,i,j,x,y,n,m,vc[16001],smax,smin=-1000000000;
vector<int> vec[16001];
int rec(int nod)
    {
    vc[nod]=1;
    int pp=0;
    for(int i=0;i<vec[nod].size();i++)
        if(vc[vec[nod][i]]==0)
            {
            pp=1;
            break;
            }
    if(pp==0)
        return  max(v[nod],0);
    else
        {
        int s=0;
        for(int i=0;i<vec[nod].size();i++)
            if(vc[vec[nod][i]]==0)
                s+=rec(vec[nod][i]);
        s+=v[nod];
        if(s>smax)
            smax=s;
        return max(s,0);
        }
    }
int main ()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d",&n);
int pp=0;
for(i=1;i<=n;i++)
    {
    scanf("%d",&v[i]);
    if(v[i]>0)
        pp=1;
    if(v[i]>smin)
        smin=v[i];
    }
if(pp==1)
    {
    for(i=1;i<=n-1;i++)
        {
        scanf("%d%d",&x,&y);
        vec[x].push_back(y);
        vec[y].push_back(x);
        if(m==0)
            m=x;
        }
    int s=rec(m);
    printf("%d",max(smax,s));
    }
else
    printf("%d",smin);
return 0;
}