P1352 沒有上司的舞會

樹上DP入門題ios

dp[][0]表示不選他且以他爲根的子樹的最大快樂值spa

dp[][1]表示選他且以他爲根的子樹的最大快樂值code

轉移方程 .... 看代碼吧ci

// luogu-judger-enable-o2
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;

int base[6010],enter[6010];
int to[15000],nex[15000],head[15000];
int dp[6010][2];

void dfs(int u)
{
    dp[u][0]=0;
    dp[u][1]=base[u];
    for(int i=head[u];i;i=nex[i])
    {
        dfs(to[i]);
        dp[u][0]+=max(dp[to[i]][0],dp[to[i]][1]);
        dp[u][1]+=dp[to[i]][0];
    } 
}

int main()
{
    ios::sync_with_stdio(false);
    int n,l,k,s;
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>base[i];
    for(int i=1;i<n;i++)
    {
        cin>>l>>k;
        to[i]=l;
        nex[i]=head[k];
        head[k]=i;
        ++enter[l];
    }
    for(int i=1;i<=n;i++)
        if(enter[i]==0)
        {
            s=i;
            break;
        }   
    dfs(s);
    cout<<max(dp[s][0],dp[s][1]);
    return 0;
}
相關文章
相關標籤/搜索