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)\)

代码

posted @ 2025-09-08 09:59  Hstry  阅读(4)  评论(0)    收藏  举报