Cod sursa(job #3198626)

Utilizator triceTanase Alex trice Data 29 ianuarie 2024 21:41:01
Problema Asmax Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <fstream>
using namespace std;

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

const int N=16000;
int v[N+1];
int mu[N+1][N+1];
    int n, m;
int dp[N+1];
bool fin[N+1];
int maxx=-1001;

int dinamica(int x)
{
    if(fin[x]) return dp[x];
    else if (dp[x]!=0) return 0;

    dp[x]=v[x];
    
    for(int i=1; i<=mu[x][0]; i++)
    {
        while(mu[x][i]<=x && i<=mu[x][0]) i++;
        int aux=dinamica(mu[x][i]);
        if(aux>0) dp[x]+=aux;
    }

    fin[x]=true;
    if(dp[x]>maxx) maxx=dp[x];
    return dp[x];
}

int main()
{
    in>>n;
    m=n-1;

    for(int i=1; i<=n; i++) in>>v[i];
    for(int i=1; i<=m; i++) 
    {
        int a,b;
        in>>a>>b;
        mu[a][++mu[a][0]]=b;
        mu[b][++mu[b][0]]=a;
    }

    dinamica(1);

    out<<maxx;

}