1 条题解
-
0
#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; }
信息
- ID
- 237
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 1
- 标签
- 递交数
- 14
- 已通过
- 8
- 上传者