做题记录 25.7.23
\(\textcolor{purple}\odot\) CF1682E Unordered Swaps
当交换的两个位置在同一置换环中时,这一置换环会分裂为两个环,反之两个环会并为一个,最终状态为 \(n\) 个置换环,因此最优方式为每次交换两个在同一置换环中的位置,操作次数为 \(n-c\),其中 \(c\) 为初始置换环数量
题目给定了 \(m\) 次操作,由于保证一定存在最优解,因此 \(m=n-c\),且不存在跨越初始置换环的操作
对于一次给定的操作 \((u,v)\),在两者间连边
对于两条边 \(A,B\),显然 \(A\) 的两个端点和 \(B\) 的两个端点分别属于一个置换环
当两者不属于同一置换环时显然两者之间顺序无影响
当两者在边上相交(即执行 \(A\) 后 \(B\) 跨越分裂出的两个环,显然满足交换律)时,显然无解,因此不会包含这种情况
当两者在边上不交且不共用顶点,显然无影响
当两者共用顶点,设共用点为 \(u\),\(A=(u,a),B=(u,b)\),设在环上的顺序为 \(u\to a\to b\),若先操作 \(B\) 则拆为两个环且 \((u,a)\) 跨越两个环,若操作 \(A\) 则合法,因此此时 \(A\) 必须在 \(B\) 之前操作
枚举每个点,将以这个点为一端的所有边按环上的顺序排序,然后按顺序得到限制,根据限制拓扑排序即可得到答案
时间复杂度 \(O(n\log n)\),瓶颈在于排序
\(\textcolor{purple}\odot\) CF1681E Labyrinth Adventures
令 \(f_{i,0/1,0/1}\) 表示第 \(i\) 层的第 \(0/1\) 个点到第 \(i+1\) 层的第 \(0/1\) 个点的距离,倍增维护矩阵的区间积(\((\min,+)\) 矩乘),容易做到 \(O(n\log n+q\log n)\),用线段树可以做到 \(O(n+q\log n)\),用猫树可以做到 \(O(n\log n+q)\)
\(\textcolor{purple}\odot\) CF1680F Lenient Vertex Cover
原图为二分图时显然合法,构造方案是容易的
若存在一条边 \((u,v)\),使得在图中将 \(u,v\) 缩为一点后变为二分图,选择 \((u,v)\) 以及对缩点后的图黑白染色后与 \(u,v\) 同色的点,显然合法
其他情况无解
第二种情况容易树上差分解决
时间复杂度 \(O(\sum (n+m))\)
\(\textcolor{blue}\odot\) CF1680D Dog Walking
令 \(G:(\mathbb N^+_{\le n})^2\mapsto 2^{\mathbb Z}\quad G(l,r)=[s-kc,s+kc]\mid s=\sum_{i=l}^r a_i,c=\sum_{i=l}^r [a_i=0]\)
定义 \(-[a,b]=[-b,-a]\),\([a,b]+[c,d]=[a+c,b+d]\)
当 \(0\notin G(1,n)\) 时无解
否则枚举最小值的位置 \(mn\) 和最大值的位置 \(mx\)(假定 \(\le mn\le mx\le n\)),设最小值为 \(x\),最大值为 \(y\),则有
可得 \(y-x\in S=(G(mn+1,mx)\cap -(G(1,mn)+G(mx+1,n)))\)
当 \(S\ne\mathbb\emptyset\) 时,这种情况下答案为 \(1+\sup S\),所有情况取最大即为答案
总时间复杂度 \(O(n^2)\)
\(\textcolor{purple}\odot\) CF1679F Formalism for Formalism
考虑在每个等价类中字典序最小的数上统计
假设某一位填了 \(x\),高位都已经确定,下一位要填 \(k\),要使数字的字典序无法变小
令 \(sw_{u,v}\) 表示是否不存在二元组 \((u,v)\)
若 \(sw_{x,k}\),则 \(k\) 可以填
若 \(\lnot sw_{x,k}\) 且 \(k<x\),则不能填
其他情况下是否可填与上一位相同
令 \(f_{i,j}\) 表示填了前 \(i\) 位,下一位可以填的状态为 \(j\) 的方案数
令 \(w=10\),容易做到 \(O(n2^ww)\)

浙公网安备 33010602011771号