1 条题解

  • 0
    @ 2026-3-31 19:35:51
    #include <bits/stdc++.h>
    using namespace std;
    
    struct NodeState {
        int index;
        int length;
        int signal;
    };
    
    int cs(int type, int signal) {
        if (type == 0) return 0;
        if (type == 2) return 15;
        if (type == 3) return signal - 1;
        if (type >= 4 && type <= 7) {
            int boost = 0;
            if (type == 4) boost = 0;
            else if (type == 5) boost = 1;
            else if (type == 6) boost = 2;
            else if (type == 7) boost = 4;
            return (signal + boost) - 1;
        }
        return signal;
    }
    
    int dfs(const vector<int>& tree) {
        if (tree.empty() || tree[0] != 1) {
            return 0;
        }
        int max_l = 0;
        stack<NodeState> stk;
        stk.push({0, 0, 15});
        while (!stk.empty()) {
            NodeState c = stk.top();
            stk.pop();
            if (c.index >= tree.size() || c.signal <= 0 || tree[c.index] == 0) {
                continue;
            }
            int new_s = cs(tree[c.index], c.signal);
            int new_l = c.length + 1;
            if (new_l > max_l) {
                max_l = new_l;
            }
            if (new_s > 0) {
                stk.push({2 * c.index + 2, new_l, new_s});
                stk.push({2 * c.index + 1, new_l, new_s});
            }
        }
        return max_l;
    }
    
    int main() {
        freopen("traversal.in", "r", stdin);
        freopen("traversal.out", "w", stdout);
        int n;
        cin >> n;
        vector<int> tree(n);
        for (int i = 0; i < n; i++) {
            cin >> tree[i];
        }
        int result = dfs(tree);
        cout << result << endl;
        return 0;
    }
    
    • 1

    信息

    ID
    237
    时间
    1000ms
    内存
    512MiB
    难度
    1
    标签
    递交数
    14
    已通过
    8
    上传者