Submission #35203807


Source Code Expand

#include <cassert>
#include <iostream>
#include <vector>

struct graph : std::vector<std::vector<int>> {
    using std::vector<std::vector<int>>::vector;
    void add_edge(int u, int v, bool directed = false) {
        (*this)[u].emplace_back(v);
        if (directed) return;
        (*this)[v].emplace_back(u);
    }
};

int main() {
    int n;
    std::cin >> n;
    graph g(n);
    std::vector<int> a(n);
    for (auto &val : a) std::cin >> val;
    for (int i = 0; i < n - 1; i++) {
        int u, v;
        std::cin >> u >> v;
        u--;
        v--;
        g.add_edge(u, v);
    }
    std::vector dp(n, std::vector<int>(2, 0));
    auto dfs = [&](auto &&self, int v, int par = -1) -> void {
        if (par != -1 && g[v].size() == 1) {
            dp[v][1 ^ a[v]] = 1;
            return;
        }
        bool flag = false;
        for (auto nv : g[v]) {
            if (nv == par) continue;
            self(self, nv, v);
            auto nxt = dp[v];
            if (!flag) {
                dp[v] = dp[nv];
                flag = true;
                continue;
            }
            nxt[0] = std::max(dp[v][0] + dp[nv][0], dp[v][1] + dp[nv][1]);
            nxt[1] = std::max(dp[v][0] + dp[nv][1], dp[v][1] + dp[nv][0]);
            dp[v] = nxt;
        }
        dp[v][1 ^ a[v]]++;
        return;
    };
    dfs(dfs, 0);
    std::cout << std::max(dp[0][0], dp[0][1]) << '\n';
}

Submission Info

Submission Time
Task D - XOR Tree Path
User ebi_fly
Language C++ (GCC 9.2.1)
Score 200
Code Size 1451 Byte
Status AC
Exec Time 105 ms
Memory 28508 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 200 / 200
Status
AC × 3
AC × 27
Set Name Test Cases
Sample sample-01.txt, sample-02.txt, sample-03.txt
All large-01.txt, large-02.txt, large-03.txt, large-04.txt, large-05.txt, max-01.txt, max-02.txt, max-03.txt, min-01.txt, min-02.txt, min-03.txt, path-01.txt, path-02.txt, path-max-01.txt, sample-01.txt, sample-02.txt, sample-03.txt, small-01.txt, small-02.txt, small-03.txt, small-04.txt, small-05.txt, uni-01.txt, uni-02.txt, uni-max-01.txt, very-small-01.txt, very-small-02.txt
Case Name Status Exec Time Memory
large-01.txt AC 70 ms 11608 KiB
large-02.txt AC 9 ms 3988 KiB
large-03.txt AC 57 ms 9360 KiB
large-04.txt AC 58 ms 9956 KiB
large-05.txt AC 48 ms 8580 KiB
max-01.txt AC 93 ms 14616 KiB
max-02.txt AC 90 ms 14432 KiB
max-03.txt AC 91 ms 14524 KiB
min-01.txt AC 2 ms 3560 KiB
min-02.txt AC 2 ms 3604 KiB
min-03.txt AC 2 ms 3580 KiB
path-01.txt AC 39 ms 10836 KiB
path-02.txt AC 71 ms 19128 KiB
path-max-01.txt AC 105 ms 28508 KiB
sample-01.txt AC 2 ms 3624 KiB
sample-02.txt AC 7 ms 3484 KiB
sample-03.txt AC 3 ms 3584 KiB
small-01.txt AC 4 ms 3684 KiB
small-02.txt AC 3 ms 3684 KiB
small-03.txt AC 2 ms 3492 KiB
small-04.txt AC 4 ms 3560 KiB
small-05.txt AC 3 ms 3692 KiB
uni-01.txt AC 28 ms 6612 KiB
uni-02.txt AC 35 ms 8256 KiB
uni-max-01.txt AC 68 ms 14948 KiB
very-small-01.txt AC 2 ms 3564 KiB
very-small-02.txt AC 2 ms 3616 KiB