样例没过求调 马风可以
查看原帖
样例没过求调 马风可以
405146
Ruan_ji楼主2024/6/22 09:08

求调,样例1输出2,悬赏2关注

#include <iostream>
#include <cstdio>
 
#define MAXN 6005

using namespace std;

int n;
struct str{
    int val;
    int fa;
    int snum, son[MAXN];
} tree[MAXN];

int dp[MAXN][2];

void dfs(int u) {
    dp[u][0] = 0; dp[u][1] = tree[u].val;
    for (int v = 1; v <= tree[u].snum; ++v) {
        //cout << u << " " << v << endl;
        dfs(tree[u].son[v]);
        dp[u][0] += max(dp[v][0], dp[v][1]);
        dp[u][1] += dp[v][0];
    }

    return ;    
}   

int main() {
    cin >> n;
    for (int i = 1; i <= n; ++i) {
        cin >> tree[i].val;
    }
    for (int i = 1; i < n; ++i) {
        int x, y;
        cin >> x >> y;
        tree[y].snum += 1;
        tree[y].son[tree[y].snum] = x;
        tree[x].fa = y;
    }

    int root;
    for (int i = 1; i <= n; ++i) {
        if (tree[i].snum == 0) {
            dp[i][0] = 0;
            dp[i][1] = tree[i].val;
        }   
        if (tree[i].fa == 0) {
            root = i;
        }
    } 

    dfs(root);

    cout << max(dp[root][0], dp[root][1]) << endl;

    return 0;
}
2024/6/22 09:08
加载中...