树形dp20pts求调
查看原帖
树形dp20pts求调
553904
yingbowen楼主2022/11/19 22:06
#include <bits/stdc++.h>
using namespace std;
int n;//节点个数 
int r[6005];//快乐指数 
int g[6005][1005];// 
int b[6005];
int fa[6005];
int used[6005][2];

int find(int x){
    return fa[x]?find(fa[x]):x;
}
void dfs(int u){
    used[u][1] = r[u];
    used[u][0] = 0;
    for(int i = 1;i<=b[u];i++){
        int v=g[u][i];//儿子编号
        dfs(v);
        used[u][0] += max(used[v][0],used[v][1]);
        used[u][1] += used[v][0];
    }
}
int main(){
    cin >> n;
    for(int i = 1;i<=n;i++){
        cin >> r[i];
    }
    for(int i = 1;i<=n-1;i++){
        int l=0,k=0;
        cin >> l >> k;
        g[k][b[k]++]=l;
        fa[l] = k;
    }
    int root = 1;
    root=find(1);
    dfs(root);
    cout << max(used[root][1],used[root][0]);
}
2022/11/19 22:06
加载中...