杂题收录+简要题解
Luogu-P2472 [SCOI2007]蜥蜴
一个网格图,每个格点有一个高度,有一些位置有一些蜥蜴,每只蜥蜴可以往外跳到欧几里得距离不超过 \(d\) 的任意一个格点上。一只蜥蜴从一个格点离开后,这个格点的高度会减少1.问最少多少只蜥蜴跳不出网格图。
考虑建立网络流模型。相当于每个点有一个经过次数,问有多少个点能走出去。所以只用原点连蜥蜴在的点,网格图中距离不超过 \(d\) 的两个点两两相连,能走到外面的点连向汇点。然而这样并不能体现一个点最多经过的次数,所以考虑拆点,每个点拆成两个点,两个点之间连上最多经过的边数。跑最大流即可。
代码没写。
CF600E
一个 \(n\) 个点的有根树,每个点有一个颜色,求每个子树内出现次数最多的颜色编号只和。
学了一下 \(\text{dsu on tree}\) 。这是一个很有意思的东西。其实是某种信息的重复利用,具体来说就是对于一个点 \(u\),\(u\) 重复利用 \(u\) 的中儿子 \(son_u\) 上统计的信息。其他轻儿子直接暴力。
考虑这样做的复杂度分析。对于一个点而言,他会被遍历到的次数是有限的。具体来说,他被遍历到的次数其实就是他祖先中一共有多少个点是父亲节点的轻儿子。然而是一个轻儿子字数大小就至少翻倍,所以一个点被遍历的次数最多是 \(\log_2 n\) 。
CF1349D
一共 \(n\) 个人,每个人有 \(a_i\) 个饼干,每次随机选择一个饼干将他分给除了原本主人以外的一个人。问期望多少次可以将所有饼干汇集到一个人手里。
这个题有两种办法。
- 鞅和停时。具体可以看这里
- 直接算期望。
第二种办法具体来说是这样:
首先考虑计算都汇集到第 \(i\) 个人手里的次数期望。这里的都汇集到第 \(i\) 个人手里意思是不是都到第 \(i\) 个人手里就不停下。设为 \(E'_i\)
其次计算如果现在都在 \(x\) 手里,全都转移到 \(y\) 手里否则不停下的操作次数期望。设为 \(C\)
这样就可以通过第一个和第二个推出汇集到每个人手里次数的期望,设为 \(E_i\) ,当然还有概率 \(P_i\)。
因为他们之间有等式:
而且还有隐藏条件:
于是可以用 \(E'_i\) 和 \(C\) 表示答案。
这两个十分好求,因为这只需要关注第 \(i\) 个人手里目前有多少个石子,就可以推出要多少步都转移到 \(i\) 手里。高斯消元即可。
树上统计
给一棵 \(n\) 个节点的树和一个 \(1\sim n\) 的排列 \(p\) ,求 \(p\) 的每个区间的虚树大小只和。
考虑一条边被统计了多少次。设这条边是 \((u,fa_u)\) ,那么除非一个区间只在 \(u\)的子树内或者只在 \(u\) 的子树外,其他情况都会统计到这条边。所以只要统计都在子树内或者都在子树外的情况即可。考虑线段树合并。这个直接按照类似于区间最大子段和的方式,统计靠左有多少个连续在/不在子树内,靠右有多少个连续在/不在子树内,自底向上合并即可。
杨辉三角
求:
其中 \(n\le 10^{18}\)
直接生成函数求导即可。详细过程
自己想到的问题
求: