Cod sursa(job #2466058)

Utilizator etienAndrone Stefan etien Data 1 octombrie 2019 12:26:46
Problema Asmax Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
#include <iostream>

using namespace std;

ifstream fin("asmax.in");
ofstream fout("asmax.out");

int n,i,nod[16001],summax=-1000001,p;
int a,b;
int lst[16001],urm[16001],vf[16001];

int sum(int varf)
{
    if(!lst[varf])
        return nod[varf];
    else
    {
        int s=nod[varf],j;
        for(j=lst[varf]; j!=0; j=urm[j])
        {
            if(sum(vf[j])>=0)
                s+=sum(vf[j]);
        }
        return s;
    }
}

void f(int varf)
{
    int M=sum(varf),j;
    for(j=lst[varf]; j!=0; j=urm[j])
    {
        if(M<sum(vf[j]))
            M=sum(vf[j]);
    }
    if(summax<M)
        summax=M;
    for(j=lst[varf]; j!=0; j=urm[j])
    {
        f(vf[j]);
    }
}

int main()
{
    fin>>n;
    for(i=1; i<=n; i++)
        fin>>nod[i];
    for(i=1; i<=n-1; i++)
    {
        fin>>a>>b;
        vf[++p]=b;
        urm[p]=lst[a];
        lst[a]=p;
    }
    for(i=1; i<=n; i++)
        cout<<sum(i)<<" ";
    cout<<"\n";
    f(1);
    fout<<summax;
    return 0;
}