Luo Gu -P1352 no party boss

The basic idea

Tree dp entry questions, 0 means no check 1 when selected.
\ [\ Begin {array} { l} treedp [u] [0] = max (treedp [u.boss] [0], treedp [u.boss] [1]) \\ treedp [u] [1] = treedp [u.boss] [0] + arr [u]; \ end {array} \]

#include<bits/stdc++.h>
using namespace std;
vector<int>boss[7000];
int arr[7000],brr[7000];
int treedp[7000][2];
int n;
void dfs(int u)
{
    treedp[u][1]=arr[u];
    treedp[u][0]=0;
    //for(int i=1;i<=n;i++)
    {
        for(int v:boss[u])
        {
            dfs(v);
            treedp[u][0]+=max(treedp[v][0],treedp[v][1]);
            treedp[u][1]+=treedp[v][0];
        }
    }
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>arr[i];
        
    }
    
    for(int i=1;i<=n-1;i++)
    {
        int l,r;
        cin>>l>>r;
        boss[r].push_back(l);
        brr[l]=1;
    }
    for(int i=1;i<=n;i++)
    {
        if(brr[i]==0)
        {
            //cout<<i<<endl;
            dfs(i);
            cout<<max(treedp[i][0],treedp[i][1])<<endl;
            break;
        }
    }
    
    return 0;
}

Guess you like

Origin www.cnblogs.com/tldr/p/11221024.html