U648394 异世界树形网络调度模拟

题目背景

# 有没有大犇会做这道题,我自己想了个大模拟,但不会打……三个小样例是对的 ## 有大犇做出来了可以私我 ## 有大犇出好了大样例也可以私我 ~~为了放题~~输出HELP即可AC了 做出标程和出好大样例私我的,(两个的)**前三名有奖** 在异世界的魔法网络中,有 $n$ 个魔法节点通过 $n-1$ 条魔法通道连接成一棵树。 每个节点都有一个 **魔法值** $a_i$(可能为负数)和一个 **魔法类型** $t_i \in {1,2,3}$。 魔法网络需要处理 $q$ 次 **时空扭曲事件**,每次事件会引发复杂的连锁反应,需要你进行**精确模拟**。

题目描述

## - 初始状态 - 一棵 $n$ 个节点的树,节点编号 $1$ 到 $n$。 - 每个节点 $i$ 有: - 魔法值 $a_i$($-10^9 \le a_i \le 10^9$) - 魔法类型 $t_i \in {1,2,3}$ - 每条边有一个 通道容量 $c_e$($1 \le c_e \le 10^9$) ## 事件类型 - 有 $5$ 种事件,共 $q$ 次: - 1.节点魔法值变化:1 u x 节点 $u$ 的魔法值增加 $x$($-10^9 \le x \le 10^9$) - 2.节点类型切换:2 u k 节点 $u$ 的类型变为 $k$($k \in {1,2,3}$) - 3.通道容量变化:3 u v w 边 $(u,v)$ 的容量变为 $w$($1 \le w \le 10^9$) - 4.局部平衡重构:4 u 以 $u$ 为根,对子树进行 魔法流平衡操作(见下文) - 5.全局能量汇聚:5 对整个树进行 跨维度能量汇聚(见下文) --- ## 核心操作说明 **魔法流平衡操作(事件4)** 设以 $u$ 为根的子树为 $S$: 1. 在 $S$ 内部构建一个 **虚拟流网络**: - 源点:$S$ 中所有 $t_i=1$ 的节点 - 汇点:$S$ 中所有 $t_i=2$ 的节点 - 中转点:$S$ 中所有 $t_i=3$ 的节点 - 边:原树中 $S$ 内的所有边,容量为 $c_e$ 2. 计算从所有源点到所有汇点的 **最大可能总流量** $F$(多源多汇) 3. 按照以下规则更新 $S$ 中节点的魔法值: - 每个源点流出的总流量不能超过其魔法值(源点魔法值减少) - 每个汇点流入的总流量增加其魔法值 - 中转点不消耗也不增加魔法值,只转发流量 - 如果流量 $F$ 超过源点总魔法值,则按比例分配 4.最终,$S$ 中所有 $t_i=2$ 的节点会记录 **累计吸收量** $B_i$(用于事件5) --- ## 跨维度能量汇聚(事件5) 1. 对整棵树进行 **分层拓扑聚合**: - 从叶子节点开始,每层节点将其 **累计吸收量** $B_i$传递给父节点 - 传递时,父节点接收的值 = $\min\left(\text{子节点传递值}, c_e \times \text{当前深度}\right)$ 2. 最终根节点(节点1)获得一个 **聚合能量值** $E$ 3. $E$ 会与所有节点的魔法值产生 **量子纠缠**: - 最终结果 $R = E \times \sum_{i=1}^n \left[ a_i \times (d_i+1) \right]$ - 其中 $d_i$ 是节点 $i$ 的深度(根节点深度为0) 4. 输出 $R$ 的值(**可能非常大,需要高精度**)

输入格式

第一行两个整数 $n, q$($1 \le n \le 2\times 10^5, 1 \le q \le 10^5$) 第二行 $n$ 个整数 $a_1, a_2, ..., a_n$ 第三行 $n$ 个整数 $t_1, t_2, ..., t_n$ 接下来 $n-1$ 行,每行三个整数 $u, v, c$,表示边和容量 接下来 $q$ 行,每行一个事件,格式如上所述

输出格式

对于每个 **事件5**,输出一行,表示 $R$ 的值。 由于 $R$ 可能非常大,输出时: - 如果 $R < 10^{100}$,直接输出十进制值 - 否则输出科学计数法:x.xxx...e+xxx - 保留100位有效数字(四舍五入) - 指数部分输出十进制

说明/提示

``` ## 样例说明: 这些样例数据经过精心设计,可以测试各种边界情况: - 样例1:测试基本的事件4和5逻辑 - 样例2:测试类型切换对网络流的影响 - 样例3:测试所有事件类型的组合,包括边容量变化 --- ## 样例3解释: **1. 初始状态** ``` 节点: 1 2 3 4 5 6 7 a_i: 5 -3 2 4 -1 6 3 t_i: 1 2 3 1 2 3 1 边容量: 1-2:12, 2-3:9, 2-4:7, 3-5:5, 3-6:8, 5-7:6 ``` **2 .事件序列执行过程:** 1. 事件1: 1 4 2 - 节点4的魔法值: 4 → 6 - 状态更新: a[4] = 6 2. 事件2: 2 5 1 - 节点5的类型: 2(汇点) → 1(源点) - 状态更新: t[5] = 1 3. 事件3: 4 3 (以节点3为根的子树平衡) 子树包含节点: 3,5,6,7 - 源点: 节点5(a=-1), 节点7(a=3) 总魔法值=2 - 汇点: 无 (节点3是中转点,节点6是中转点) - 流量F=0,无变化 - 节点5,7的B值不变 4. 事件4: 3 2 4 15 - 边(2,4)容量: 7 → 15 - 更新边容量 5. 事件5: 4 2 (以节点2为根的子树平衡) 子树: 2,3,4,5,6,7 - 源点: 节点4(a=6,t=1), 节点5(a=-1,t=1), 节点7(a=3,t=1) 总魔法值=8 - 汇点: 节点2(a=-3,t=2) - 中转点: 节点3(t=3), 节点6(t=3) - 最大流量F = min(8, 到节点2的路径容量) = 8 - 更新: - 源点魔法值耗尽: a4=0, a5=-9, a7=-5 - 汇点节点2: a2从-3变为5, B2增加8 - B2累计值=8 6. 事件6: 5 (第一次全局能量汇聚) - 分层拓扑聚合: - 叶子→父节点传递B值 - 节点4(B=0)→2: min(0,15×2)=0 - 节点7(B=0)→5→3→2: 路径传递计算 - 节点6(B=0)→3→2 - 最终根节点1获得E值 - 量子纠缠计算: - 深度: d1=0,d2=1,d3=2,d4=2,d5=3,d6=2,d7=4 - 当前a值: [5,5,2,0,-9,6,-5] - 求和 = 5×1 + 5×2 + 2×3 + 0×3 + (-9)×4 + 6×3 + (-5)×5 = 5 + 10 + 6 + 0 - 36 + 18 - 25 = -22 - R = E × (-22) = -720 7. 事件7: 1 7 -3 - 节点7魔法值: -5 → -8 8. 事件8: 2 1 3 - 节点1类型: 1(源点) → 3(中转点) 9. 事件9: 4 1 (整棵树平衡) - 源点: 节点4(a=0), 节点5(a=-9), 节点7(a=-8) 总魔法值=-17 - 汇点: 节点2(a=5,t=2) - 由于源点总魔法值为负,流量F=0,无变化 - B值不变 10. 事件10: 5 (第二次全局汇聚) - E值重新计算 - a值求和 = 5×1 + 5×2 + 2×3 + 0×3 + (-9)×4 + 6×3 + (-8)×5 = 5 + 10 + 6 + 0 - 36 + 18 - 40 = -37 - R = E × (-37) = 1512 ### 关键点: 1. 负数魔法值会影响流量计算 2. 类型切换改变网络结构 3. 边容量变化影响传递限制 4. 全局汇聚的E值通过分层聚合计算 --- ``` ## 数据范围 - 30%:$n, q \le 1000$,事件**只有类型4和5** - 50%:$n, q \le 50000$,**没有类型3事件** - 70%:$n, q \le 10^5$,结果**不需要**高精度 - 100%:全范围,结果**需要**高精度 --- ## 时空限制 - 时间:3.0秒 - 内存:512MB --- - 事件4的流量计算可以使用树形DP+贪心 - 事件5的传递需要自底向上分层处理 - 高精度建议使用压位+FFT优化乘法 - 注意负数处理和科学计数法转换 - 实际数据保证中途结果不超过 $10^{1000}$