1 条题解
-
0
题解:「ROI 2023 Day2 T4」Выполнить план, но не перевыполнить(基于提供代码)
核心思路总览
本题通过 树形DP计算效率范围 + 区间构造计划 + 证书预计算 解决交互问题,核心逻辑是:
- 用树形DP求出生产计划效率的最小值和最大值,以及中间所有可能的效率值。
- 对每个查询的效率值 ( v_i ),判断是否在可行范围内,若可行则构造对应的生产计划并计算证书。
- 交互阶段直接返回预存的计划或证书,确保响应效率。
整体复杂度 ( O(n + q\log n) ),适配 ( 2 \times 10^5 ) 规模数据。
关键步骤拆解
1. 树形DP计算效率范围
效率的本质是“树上带权最大独立集”(装配厂为独立集,权值为工厂人数)。通过两次DFS计算效率的可行范围:
(1)首次DFS(
dfs1):计算基础边界- 对每个节点 ( x ),维护两个状态:
f[x][0]:不选 ( x ) 时,子树的最小效率(所有工厂取下限 ( L[i] ))。f[x][1]:选 ( x ) 时,子树的最小效率。g[x][0]:不选 ( x ) 时,子树的最大效率(所有工厂取上限 ( R[i] ))。g[x][1]:选 ( x ) 时,子树的最大效率。
- 转移方程(以最小效率为例):
f[x][0] += max(f[y][0], f[y][1])(不选当前节点,子节点可选或不选,取最大值)。f[x][1] += f[y][0](选当前节点,子节点必不选)。
- 同时记录节点的DFS序
dfn[x],用于后续区间划分。
(2)二次DFS(
dfs2):计算中间效率值- 调整根节点的状态,计算每个节点在“部分工厂取上限、部分取下限”时的效率值,存储在
val数组中。 val[i]表示按DFS序前 ( i-1 ) 个节点取上限、其余取下限的效率,形成连续的效率范围。
2. 证书预计算(
sl和sr数组)证书是异或和:( k = \bigoplus_{j=1}^n \left( (x \cdot j + y \cdot a_j^2) \bmod m \right) )。为快速计算任意计划的证书,预处理两个数组:
sr[i]:前 ( i ) 个节点(按DFS序)取上限 ( R[j] ) 时的证书前缀异或和。sl[i]:第 ( i ) 到 ( n ) 个节点(按DFS序)取下限 ( L[j] ) 时的证书后缀异或和。- 对于混合计划(前 ( p-1 ) 个上限,第 ( p ) 个中间值,其余下限),证书可通过
sr[p-2] ^ sl[p+1] ^ 中间值贡献快速计算。
3. 查询处理与计划构造
(1)判断可行性
- 若查询的 ( v_i ) 小于最小效率
val[1]或大于最大效率val[n+1],输出-1。 - 否则,通过二分查找
val数组,找到对应的位置pos,确定需要调整的节点。
(2)构造计划与计算证书
- 当
pos=1时:所有节点取下限 ( L[j] ),证书为sl[1]。 - 当
pos>1时:- 前
pos-2个节点取上限 ( R[j] )。 - 第
pos-1个节点取中间值now = R[w[pos-1]] - (val[pos] - v_i)(调整该节点使总效率为 ( v_i ))。 - 其余节点取下限 ( L[j] )。
- 证书通过
sr[pos-2] ^ sl[pos] ^ 中间值贡献计算。
- 前
4. 交互检验响应
- 收到检验请求时,根据预存的构造逻辑,直接输出对应的计划(下限、上限或中间值),确保效率和证书匹配。
代码解析
1. 树形DP实现
dfs1递归计算每个节点的最小/最大效率,同时记录DFS序。dfs2调整根节点状态,计算中间效率值val,形成连续的可行效率范围。
2. 证书预处理
sr数组:从左到右累积上限节点的证书异或和。sl数组:从右到左累积下限节点的证书异或和。
3. 查询响应
- 二分查找
val数组定位效率值对应的调整位置。 - 按位置构造计划,通过前缀/后缀异或和快速计算证书。
4. 交互处理
- 检验阶段直接按构造逻辑输出计划,确保与第一阶段的证书一致。
关键验证(结合样例1)
- 样例1中所有工厂的人数固定(( L[i] = R[i] )),因此效率唯一。
dfs1计算出唯一效率值19,val数组中只有该值。- 查询 ( v=19 ) 时,定位到对应位置,输出唯一计划的证书
10,检验时返回该计划。
复杂度分析
- 预处理:两次DFS均为 ( O(n) ),证书数组预处理 ( O(n) ),总 ( O(n) )。
- 查询:每个查询二分查找 ( O(\log n) ),总 ( O(q\log n) )。
- 交互检验:每次输出计划 ( O(n) ),但总次数受限(( n \cdot c \leq 10^6 )),不影响整体效率。
关键结论
本题的核心是利用树形DP确定效率的可行范围,通过区间划分构造中间效率的计划,并借助前缀/后缀异或和快速计算证书。交互阶段依赖预存的构造逻辑,确保响应正确高效。
- 1
信息
- ID
- 4374
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 15
- 已通过
- 1
- 上传者