做题记录 25.4.9
\(\textcolor{purple}\odot\) P3511 [POI 2010] MOS-Bridges
二分答案,转化为一张图中有有向边和无向边,要给无向边定向使之有欧拉回路
有欧拉回路等价于每个点出度等于总度数的一半
因此建立二分图,每个左部点为一条边,每个右部点为一个点,左部点只能匹配一次,第 \(i\) 个右部点匹配 \(\frac{deg_i}2\) 次
对于有向边 \(u\to v\),左部点向右部的 \(v\) 连边
对于无向边 \(u-v\),左部点向右部的 \(u,v\) 分别连边
若所有左部点都匹配,则存在欧拉路,此时若左部 \(i\) 匹配右部 \(j\),表示第 \(i\) 条边定向为指向 \(j\)
根据定向结果建图求出欧拉路即可构造方案
时间复杂度 \(O((n+m)^{1.5}\log V)\),可优化到 \(O((n+m)^{1.5}\log m)\)
\(\textcolor{black}\odot\) CF1458D Flip and Reverse
令 \(0\) 为 \(-1\),\(1\) 为 \(+1\),令 \(s_i\) 为 \(1\sim i\) 的前缀和,从 \(-n\sim n\) 分别建立一个点,所有 \(s_i\) 连向 \(s_{i+1}\)(其中 \(i<n\)),则序列可以看做一条从 \(0\) 开始的欧拉路
序列中的操作等价于把欧拉路中一个环的遍历顺序取反
因此任意一条从 \(0\) 开始的欧拉路都可对应一个合法序列
由于要求序列字典序最小,等价于要求欧拉路字典序最小
有一种 \(O(n)\) 的简单实现:令 \(cnt_{i,0}\) 表示目前为止 \(i\to i-1\) 的数量,\(cnt_{i,1}\) 表示目前 \(i\to i+1\) 的数量
令 \(x\) 表示目前所在的点,初始 \(x=0\),\(cnt\) 的初始值容易预处理
若 \(cnt_{x,0}>0\) 且 \(cnt_{x-1,1}>0\),则说明存在一个 \(x\to x-1\to\cdots\to x-1\to x\) 的环,因此当前位置可以 填 \(0\),令 \(cnt_{x,0}\gets cnt_{x,0}-1,x\gets x-1\)
否则若 \(cnt_{x,1}>0\),则此时要么没有向 \(x-1\) 的边,要么存在向 \(x-1\) 的边但没有回到 \(x\) 的边,两种情况下都不能先移到 \(x-1\),因此当前位置只能填 \(1\),令 \(cnt_{x,1}\gets cnt_{x,1}-1,x\gets x+1\)
否则当前位置可以填 \(0\),令 \(cnt_{x,0}\gets cnt_{x,0}-1,x\gets x-1\)
总时间复杂度 \(O(\sum n)\)
\(\textcolor{black}\odot\) CF1163F Indecisive Taxi Fee
删边最短路模板题
\(\textcolor{purple}\odot\) P8456 「SWTR-8」地地铁铁
假设边权为 \(0/1\)
总点对数量为 \(\binom n2\),考虑减去不合法的得到合法数量
不合法的 \((x,y)\) 分为三类:
- \(x\) 和 \(y\) 之间任意简单路径都只经过 \(0\) 边
- \(x\) 和 \(y\) 之间任意简单路径都只经过 \(1\) 边
- \(x\) 和 \(y\) 之间任意简单路径都只经过 \(0\) 或只经过 \(1\),且两种路径都有
前两种计算方式相同,以第一种为例,可证若一个点双中存在 \(1\) 边,则圆方树上经过这个点双的点对之间一定存在经过这条 \(1\) 边的路径,因此删去含 \(1\) 边的点双内的所有边,满足第一种条件的点对数量为连通块大小选 \(2\) 之和
对于第三种情况,显然满足要求的 \((x,y)\) 必在同一点双内,可证一个点双内至多有一组这样的 \((x,y)\),且一个点双内存在满足要求的点对 当且仅当 点双内存在恰好两个点满足点同时含有指向同一点双内点的 \(0\) 边和 \(1\) 边
通过一次 \(\text{Tarjan}\) 求出每个点双内的边和点,容易处理情况三
情况二容易通过并查集实现,也可建图后直接统计连通块
时间复杂度 \(O(n+m\alpha(n))\),可做到 \(O(n+m)\)
\(\textcolor{black}\odot\) CF1515G Phoenix and Odometers
显然各个强连通分量之间独立,因此分开考虑
假设一个强连通分量中存在长为 \(a\) 和 \(b\) 的环,则这个连通分量可以表示出长为 \(ax+by\;(x,y\in\mathbb N^+)\) 的环,根据裴蜀定理,相当于能表示出所有 \(\gcd(a,b)\mid w\)(不需要考虑 \(w<\min(a,b)\) 的情况,因为 \(x,y,a,b,w\) 都是对询问中的 \(t\) 取模),因此问题转化为求出一个强连通分量中所有环长的 \(\gcd\) 和
先一次 \(\text{Tarjan}\) 求出所有强连通块,然后对连通块进行 \(\text{dfs}\),求出每个点到搜索树根的距离 \(d_u\),对于非树边 \((u,v,w)\),令当前连通块的 \(\gcd\) 和对 \(d_u-d_v+w\) 取 \(\gcd\)
时间复杂度 \(O(\sum (n+(m+q)\log V))\)
\(\textcolor{purple}\odot\) CF1361E James and the Chase
显然一个点合法当且仅当以这个点为起点进行 \(\text{dfs}\) 时,\(\text{dfs}\) 树上只存在返祖边和树边
这样可以 \(O(n)\) 判断一个点是否合法
假如已经找到一个合法的点 \(u\),考虑如何找到所有合法的点
可证非根结点 \(u\) 合法当且仅当其子树内只存在恰好一条到 \(u\) 的祖先(不含 \(u\))的返祖边,满足指向的点合法
先通过树形 \(dp\) 求出返祖边的数量和具体指向的结点,然后通过一次 \(\text{dfs}\) 找到所有合法点,时间复杂度 \(O(n)\)
随机 \(100\) 次并判断,若存在一个合法的 \(u\) 则由其求出答案,否则直接判断无解,错误概率只有 \(0.8^{100}\approx 2\times10^{-10}\)
时间复杂度 \(O(\sum Tn)\),其中 \(T\) 为随机次数 \(100\)

浙公网安备 33010602011771号