Dp苦手( 。

参考代码:

#ifndef LOCAL
    #include <bits/stdc++.h>
#endif
constexpr auto Inf = 0X3F3F3F3F;
typedef long long LL;
using namespace std;

namespace IO {
    inline LL read() {
        LL o = 0, f = 1; char c = getchar();
        while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar(); }
        while (c > '/' && c < ':') { o = o * 10 + c - '0'; c = getchar(); }
        return o * f;
    }
    inline char recd() {
        char o; while ((o = getchar()) != '(' && o != ')'); return o;
    }
}
using namespace IO;

const int SIZE = 1E5 + 7, Mod = 1E9 + 7;
vector<int> G[SIZE];
LL w[SIZE], Dp[SIZE][2]; int vs[SIZE];

void DFS(int u) {
    Dp[u][1] = w[u];
    for (int e = 0; e < G[u].size(); e++) {
        int v = G[u][e];
        DFS(v);
        Dp[u][0] += max(Dp[v][1], Dp[v][0]);
        Dp[u][1] += Dp[v][0];
    }
}

int main() {
    int N = read();
    for (int pos = 1; pos <= N; pos++) w[pos] = read();
    for (int pos = 1, u, v; pos < N; pos++)
        u = read(), v = read(), G[v].push_back(u), vs[u] = 1;
    for (int pos = 1; pos <= N; pos++)
        if (!vs[pos]) {
            DFS(pos), printf("%lld\n", max(Dp[pos][1], Dp[pos][0]));
            break;
        }
}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论