把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

杂题选讲 cy

CF1666K Kingdom Partition

我们首先钦定 \(A\) 点选了 A,\(B\) 点选了 B,其它点选了 C,这样会有一个代价。

然后我们尝试将每个 C 点改成 A 或者改成 B。我们将其看成一个物品,其代价为其所有向外的连边之和。

而同时,对于每条边,如果其两端是不同的颜色,其会使代价减少 \(2l\)。我们将这条边看成两个物品,含义是,如果选了这个物品,那么其中一个端点要选 A,另一个要选 B。

然后我们跑最大/小权闭合子图就好了……吗?

并不是,我们并不能保证一个点的 “改 A”、“改B” 两种物品不被同时选择。

但是,如果你仔细计算一下贡献,会发现一个点同时改成两种所带来的贡献为 \(0\),也就相当于啥都不变保持为 C,因此是没有问题的。时间复杂度是网络流复杂度。

submission

CF983D Arkady and Rectangles

考虑扫描线,线段树上每个节点标记永久化一下这个节点代表的区间被哪些颜色覆盖了,然后线段树上每个节点维护一下区间内颜色最小的点,以及最大的没有显露出的点,然后每次暴力将一个之前没有被看见的节点标记即可,复杂度 \(O(n\log ^2n)\)

注意离散化有一点细节。

submission

QOJ #3091. Japanese Knowledge

这题非常高妙在第一步,我们考虑构造一个双射。

对于一个 \(k\),我们说明,恰有 \(k\) 个位置满足 \(x_i=A_i\) 与前 \(k\) 个位置 \(x_i=0\),后面的位置 \(x_i<A_i\) 构成双射。

左边对右边的映射只需要将 \(x_i=A_i\) 的位置看成 \(0\),然后将 \(0\) 全部移到开头即可,因为 \(A\) 是单调不降的所以如果原来 \(A_i<x_i\),那往后移动肯定还是 \(A_i< x_i\)

右边对左边的映射可以考虑将每个 \(x_i\) 尽量往前移动直到不能移为止,这也是一一对应的。

因此我们的问题变成,给一个阶梯状的网格,要求从右边界任意点出发,走到下边界每个点的方案数。

考虑分治 NTT,所做的就是在一个阶梯状网格上,已知走到右边界每个点的方案数,求出走到下边界每个点的方案数。

分治,取分值区间 \([l,r]\) 中点 \(m\),将 \([m+1,r]\)\(A_i\) 都减去 \(A_m\),然后分治做上面那个阶梯,接着我们有一个矩形,知道走到上边界和右边界的方案数,要求走到左边界和下边界每个点的方案数,这个可以四次卷积实现,最后递归左边的阶梯状物即可。

时间复杂度 \(O((n+A_n)\log ^2n)\)submission

Topcoder 12985 LotteryTree

考虑一个比较暴力的做法:记 \(f(x,T)\) 表示 \(x\) 子树 dfs 序之前的概率之和是 \(T\),是否存在一种 dfs 序使 \(x\) 满足条件,求解这个只需要计算每个儿子能不能放在某个位置上,然后做一个匹配即可。叶子处需要特殊判断。我们最终要求 \(f(0,0)\)

但是这样复杂度显然爆炸。有一个剪枝:如果 \(T\) 往后这个子树内都没有 \(\frac{1}{p}\) 这个点了,那么显然是满足条件的,加上这个剪枝发现过了。

这个状态数可以这样理解:走到一个点的时候一定对应了某个区间内的关键点,而这个区间的关键点是和之前祖先放在第几个儿子唯一对应的。又因为现在子树内的区间概率是确定的,所以本质不同的关键点区间只有 \(O(p)\) 个,总状态数就是 \(O(np)\)

使用匈牙利做匹配,复杂度 \(O(n^4p)\),因为不满可以通过。

UPD:感谢 JCY 指出,这里的复杂度实际上是 \(O(p\sum deg_i^3)=O(pn^3)\)

submission

Topcoder 13503 ConnectingGame

考虑如果同时不存在两条路径从上到下以及从左到右,那么肯定同时存在两条八联通的路径从上到下从左到右。

这两条路径肯定会在一个 \(2\times 2\) 的小方格中相交,其中一条从左上走到右下,另一条从右上走到左下,则我们建立这样的图,然后跑网络流即可。

等等,你这样流四条路径起终点对应关系不会错吗?

实际上是不会的,因为假设两条路径交换了起终点,则肯定在一个 \(2\times 2\) 的小方格经历了如上交换,这时可以交换两边的终点,这样就对了。

submission

鞅的停时定理在 OI 中的应用

鞅的停时定理在 OI 中 P 用没有。

大概就是要构造一个势能函数 \(\varphi(X)\),满足 \(\varphi(X)=\sum\varphi(X')p(X')-1\),其中 \(X'\) 表示 \(X\) 的后继状态,以及对应的概率。并且这个势能函数要满足终止点是最高点,这样用终止点的势能减去起点的势能即可。

CF1025G Company Acquisitions

考虑定义单个点的势能函数为 \(f(x)\),表示一个后面跟着 \(x\) 个未选中点的选中点的势能。

如果我们单次对两个被分别有 \(x,y\) 个儿子的标记点操作,就会 \(\frac{1}{2}\) 概率变成 \(x+1,0\)\(\frac{1}{2}\) 概率变成 \(y+1,0\),按照这个列式有 \(f(x)+f(y)=\frac{1}{2}f(x+1)+\frac{1}{2}f(y+1)+f(0)-1\)

因为势能是相对的,所以我们直接大力认为 \(f(0)=0\),那么有 \(f(x)+f(y)=\frac{1}{2}(f(x+1)+f(y+1))-1\)

直接让 \(x\)\(y\) 独立开来,有 \(f(x)=\frac{1}{2}f(x+1)-1\) ,解得 \(f(x)=2^x-1\),可以直接计算。

submission

CF1349D Slime and Biscuits

\(f(x)\) 表示一个有 \(x\) 个饼干的人的势能。

考虑一个人的饼干数 \(+1,-1\) 以及不变的概率,记 \(m=\sum a_i\),式子是

\[\sum\limits f(a_i)=-1+\sum f(a_i-1)\frac{a_i}{m}+f(a_i)\frac{m-a_i}{m}\frac{n-2}{n-1}+f(a_i+1)\frac{m-a_i}{m}\frac{1}{n-1} \]

\(-1\) 平均分拆进去,即可递推,时间复杂度 \(O(n+\sum a_i)\)

submission

CF850F Rainbow Balls

\(f(x)\) 表示一个有 \(x\) 个球的颜色的势能。

按照上题考虑,记 \(m=\sum a_i\),式子是

\[\sum f(a_i)=-1+\sum f(a_i-1)\frac{(m-a_i)a_i}{m(m-1)}+f(a_i)(1-\frac{2(m-a_i)a_i}{m(m-1)})+f(a_i+1)\frac{(m-a_i)a_i}{m(m-1)} \]

然后你发现这时候 \(-1\) 不能每个 \(\frac{1}{n}\) 拆进去了!因为如果你直接拆进去 \(a_i=0\) 处的式子就不对了!

为了使 \(a_i=0\) 处的常数项归 \(0\),我们拆 \(\frac{a_i}{m}\) 进去就可以满足条件。

另一个问题是,\(m\) 实在有点大了,\(f(m)\) 处的值不好求。

不过好在这个递推式可以写成足够简单的形式,具体来说就是 \(f_i=2f_{i-1}-f_{i-2}+\frac{m-1}{m-(i-1)}\)

计算每个 \(\frac{m-1}{m-(i-1)}\)\(f(m)\) 的贡献,容易发现都是 \(m-1\),于是 \(f_m\) 就是 \(m(m-1)\),然后剩下暴力递推即可。

时间复杂度 \(O(\max a_i\log m+n)\)submission

posted @ 2024-05-23 20:06  275307894a  阅读(74)  评论(2编辑  收藏  举报
浏览器标题切换
浏览器标题切换end