Cod sursa(job #2514805)

Utilizator Rares31100Popa Rares Rares31100 Data 26 decembrie 2019 20:47:17
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
#include <bitset>
#define Size 16000

using namespace std;

ifstream cin("asmax.in");
ofstream cout("asmax.out");

int n;
int val[Size+1];
int vf[Size*2+1],urm[Size*2+1],last[Size+1],nr;
int maxSum=-1000000000;
bitset <16001> viz;

void adauga(int from,int to)
{
    vf[++nr]=to;
    urm[nr]=last[from];
    last[from]=nr;
}

int dfs(int nod)
{
    int sum=val[nod];
    viz[nod]=1;

    for(int val,k=last[nod];k;k=urm[k])
        if(!viz[ vf[k] ])
        {
            val=dfs(vf[k]);

            if(val>=0)
                sum+=val;
        }

    maxSum=max(maxSum,sum);

    return sum;
}

int main()
{
    cin>>n;

    for(int i=1;i<=n;i++)
        cin>>val[i];

    for(int i,j,k=1;k<=n-1;k++)
    {
        cin>>i>>j;

        adauga(i,j);
        adauga(j,i);
    }

    dfs(1);

    cout<<maxSum;

    return 0;
}