Cod sursa(job #2469902)

Utilizator etienAndrone Stefan etien Data 8 octombrie 2019 11:33:05
Problema Asmax Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 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[32001],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 maxi=sum(varf),j;

    for(j=lst[varf]; j!=0; j=urm[j])

    {

        if(maxi<sum(vf[j]))

            maxi=sum(vf[j]);

    }

    if(summax<maxi)

        summax=maxi;

    for(j=lst[varf]; j!=0; j=urm[j])
    {
        f(vf[j]);
    }

}

void adauga(int x,int y)
{   vf[++p]=y;
    urm[p]=lst[x];
    lst[x]=p;
}
int main()
{
    fin>>n;
    for(i=1; i<=n; i++)
        fin>>nod[i];
    for(i=1; i<=n-1; i++)
    {
        fin>>a>>b;
        adauga(a,b);
        adauga(b,a);
    }
    f(1);
    fout<<summax;
    return 0;
    fin.close();
    fout.close();
}