2025 年 8 月 OI 做题笔记

P8622 [PA 2012 Finals] Tax

NFLS2288 G \(|\) POI \(|\) 图论建模 \(|\) 最短路

人类智慧建模。

先点边互相转化。

考虑从边 \(p\) 经点 \(x\) 到达边 \(q\) 的费用,是 \(\max(w(p),w(q))\)

对于每对相邻的边 \((p,q)\) 暴力建图复杂度是 \(O(m^2)\) 的。

考虑优化。拆无向边为两条有向边,分别属于两个端点。对于每个点及其所有出边建立一个“环岛”结构

将所有出边按边权排序,大小相邻的边权之间差分

\((p,q)\) 满足 \(w(p)<w(e_1)<w(e_2)<...<w(e_k)<w(q)\)

则从 \(p\)\(q\) 可以被刻画为 \(w(e_1)-w(p)+w(e_2)-w(e_1)+...+w(q)-w(e_k)\)

即经过 \(e1, e2, \dots, e_k\) 到达 \(q\)

考虑缺的一项 \(w(p)\) 怎么补上。建 \(p\) 与反向边 \(p'\) 之间边权为 \(w(p)\) 的边。从每个“环岛”到另一个“环岛”,需要先从 \(p\) 跳到 \(p'\),即“转向”需要花费 \(w(p)\)

对于 \(w(p)>w(q)\) 连边 \(q\xrightarrow{0} e_k, e_k\xrightarrow{0} e_{k-1}, \dots\)。最后设立超级源汇点,跑一遍 Dij 就做完了。

HDU4424 Conquer a New Region

NFLS2288 H \(|\) Kruskal 重构树 \(|\) 拆贡献

先建立 Kruskal 重构树。令首都为 \(c\),则转化到重构树上收益为 \(\displaystyle \sum_{x \neq c, x \in \text{leaf}} w(LCA(x,c))\)

考虑在每个 \(LCA\) 节点上拆贡献。Kruskal 重构树是一棵二叉树,记左儿子 \(ls\),右儿子 \(rs\)

那么 \(ls\) 子树内所有叶子对 \(rs\) 子树内每个叶子的贡献为 \(\text{siz}(ls) \times w(LCA)\)。左儿子也一样算。

那么在 \(ls,rs\) 上分别打一个懒标记,统计答案的时候遍历重构树,将标记所代表的贡献下放到叶子节点即可。

BZOJ2407 探险

NFLS2288 F \(|\) 最短路 \(|\) 二进制拆分

首先这个环形最短路肯定是不能直接做的。考虑枚举出发边 \(i\),返回边 \(j\)

枚举每一对并跑最短路,复杂度至少要乘一个 \(n^2\),而且还浪费了 \(1\) 的其他出边。

考虑若干出边能不能一起做。

注意到 \(i \neq j \Leftrightarrow \exist x, i \& 2^x \neq j\& 2^x\)

将节点 \(1\) 拆成源点 \(S\) 汇点 \(T\)。将出边编号,对于二进制上每一位 \(x\),令编号这一位为 \(0\) 的边当作出发边连 \(S\),为 \(1\) 的边当作返回边连 \(T\),跑最短路,然后交换连边方式重新跑一遍最短路即可。

不难证明这样可以覆盖每一对 \((i,j)\) 的情况。复杂度 \(O(m \log n \log m)\),Dijkstra。

CF1906H Twin Friends

CF *2200 \(|\) 计数 DP

见洛谷题解区 https://www.luogu.com.cn/article/hbhs5ndn

CF1553E Permutation Shift

CF *2100 \(|\) 找性质 \(|\) 排列与置换 \(|\) 并查集

不难想到枚举移位长度 \(k\) 并快速判断。

假设移位 \(k\) 对应的排列 \(q_1, q_2, \dots, q_n\)。这就对应一个置换:

\[\begin{pmatrix} q_1&q_2&\dots&q_n \\ p_1&p_2&\dots&p_n \\ \end{pmatrix}\]

而我们又知道置换对应若干个轮换。对于每个轮换,最少需要的交换次数显然为循环大小 \(-1\)

那么得到结论:每个移位 \(k\) 所需要的交换次数 \(=n-\) 它对应的置换的轮换个数。轮换个数拿并查集跑一下联通块就能统计出来了。

问题是这么做是 \(O(n^2)\) 的。

观察到一个特殊性质:\(m \le \frac{n}{3}\)。交换次数为 \(m\),能交换到的位置个数至多为 \(2m\),不能交换到的位置个数至少为 \(n-2m\)

也就是说至少要有 \(n-2m\) 个位置满足 \(q_i=p_i\)。而 \(m \le \frac{n}{3}\),那么对于任意合法 \(k\),满足 \(q_i=p_i\) 的位置至少要有 \(\frac{n}{3}\) 个!

又由于每个位置 \(i\) 满足 \(q_i=p_i\)\(k\) 有且仅有一个,所以我们得到重要结论:

合法的 \(k\) 至多有 \(3\) 个。

统计对于每个 \(k\) 有多少个位置 \(i\) 满足 \(q_i=p_i\),记为 \(cnt(k)\)。只有当 \(cnt(k) \le \frac{n}{3}\) 时才用并查集判断。复杂度 \(O(n)\)

CF1220E Tourism

CF *2200 \(|\) Tarjan 缩点 \(|\) 边双连通分量

边双缩点,然后在树上讨论一下。没啥思维难度,但是笔者写这道题依然挂了好多次(

要注意连通分量大小 \(>1\) 是可以掉头的。

P4139 上帝与集合的正确用法

扩展欧拉定理

题意求 \(\large 2^{2^{2^\cdots}} \normalsize \bmod p, p \in \mathbb{N^*}\)

考虑扩展欧拉定理,当 \(b>\varphi(p)\) 时有 \(a^b \equiv a^{b \bmod \varphi(p) + \varphi(p)} \pmod p\)

由于原数极大,所以在指数上一定是 \(>\varphi(p)\) 的。递归计算,在 \(p>1\) 时无脑套公式即可。

posted @ 2025-08-23 23:06  Greenzhe_awa  阅读(16)  评论(0)    收藏  举报