2025.9.7 炼石计划 week2 图论 讲课笔记
记录:4,8 \(\quad\) 6 \(\quad\) 7 \(\quad\) 10 \(\quad\) 1,5 \(\quad\) 2,9,3 \(\quad\) 12 \(\quad\) 11
题单:
https://www.mxoj.net/training/T1156?groupId=1124&returnUrl=/training/listForGroup?groupId=1124
T7 \(\textcolor{black}\odot\) CF843D Dynamic Shortest Path
预先跑一次 \(\text{dijkstra}\),对于每个 \(1\le i\le n\) 求出 \(ds_i=\text{dis}(1,i)\),这一步时间复杂度 \(O((n+m)\log n)\)
询问直接从 \(ds\) 数组上得到
对于一次修改,设修改的 \(c\) 条边为 \(e_{1\sim c}\)
类似 \(\text{Johnson}\) 算法,新建立一张图,原图中 \((u,v,w)\) 在新图中为 \((u,v,ds_u+w-ds_v)\)
显然对于任意 \(i\),原图中 \(1\) 到 \(i\) 的最短路一定对应新图中 \(1\) 到 \(i\) 的一条全 \(0\) 路径
在新图中每条 \(e_i\mid 1\le i\le c\) 的边权加一,设新图中 \(1\) 和 \(i\) 的距离为 \(d_i\),则这样一次修改对原本 \(ds\) 的影响为 \(ds_i\gets ds_i+d_i\)
考虑如何 \(O(n+m)\) 求出 \(d_{1\sim n}\)
只有 \(c\) 条边边权加一,因此对于任意 \(i\),新图中 \(d_i\le \min(c,n-1)\),或 \(1\) 和 \(i\) 不连通
因此可以把正常的 \(\text{dijkstra}\) 中的堆换成桶,从而去掉 \(\log n\),做到线性
总时间复杂度 \(O((n+m)\log n+q(n+m))\)
T10 \(\textcolor{purple}\odot\) CF888G Xor-MST
先将所有数建为 \(\text{Trie}\)
考虑一个结点的两个子树 \(S_1,S_2\),显然两者之间必须选择恰好一条边,且显然选择 \(\min_{u\in S_1,v\in S_2}(u\oplus v)\)
若 \(|S_1|<|S_2|\) 则枚举 \(u\) 在 \(S_2\) 中查最小值,反之枚举 \(v\),显然时间复杂度 \(O(n\log n\log V)\)
Tnew \(\textcolor{blue}\odot\) CF416E President's Path
显然 \((x,y)\) 的答案为 \(\sum_{(u,v,w)\in E}[\text{dis}(x,u)+w+\text{dis}(v,y)=\text{dis}(x,y)]\)
显然条件可以拆分为 \([\text{dis}(x,u)+w=\text{dis}(x,v)][\text{dis}(x,v)+\text{dis}(v,y)=\text{dis}(x,y)]\)
枚举 \(x\),枚举 \(u\) 和 \(v\) 求出 \(ct_v=\sum_u [\text{dis}(x,u)+w=\text{dis}(x,v)]\),然后枚举 \(y\) 和 \(v\) 将 \([\text{dis}(x,v)+\text{dis}(v,y)=\text{dis}(x,y)]ct_v\) 计入 \((x,y)\) 的答案
时间复杂度 \(O(n^3)\)

浙公网安备 33010602011771号