概况
完成 cf 难度总和: 2300 + 2300 + 2100 + 2100 + 2000 + 2000 + 900 + 2100 = 15800 2300+2300+2100+2100+2000+2000+900+2100=15800 2300+2300+2100+2100+2000+2000+900+2100=15800
被 wyq ≈ 20000 ≈ 20000 ≈20000 吊打
简要题解
CF1422D
这道题目 2300 就过分,直接分别按照横纵坐标对传送门排序,相邻之间暴力连边。然后跑最短路就好了。
P4552
一道不错的思维题,考虑区间 [ l , r ] [l,r] [l,r] 加减 1 1 1,相当于差分数组加减 1 1 1。于是我们将差分数组大于 0 0 0 的去和小于 0 0 0 的配对,假设大于 0 0 0 的为 x x x 反之为 y y y。则最后差分数组的情况肯定是 ( 0.... , ∣ x − y ∣ ) (0....,|x-y|) (0....,∣x−y∣) 所以第一问答案即为 max ( x , y ) \max(x,y) max(x,y) 。对于第二问我们考虑如何将差分数组置 0 0 0 。那么我们可以将前面某段 0 0 0 减去 ∣ x − y ∣ |x-y| ∣x−y∣ 或者本身减,所以可能方案数为 ∣ x − y ∣ + 1 |x-y|+1 ∣x−y∣+1
CF960E
考虑树形dp,我们设
f
u
,
0
/
1
f_{u,0/1}
fu,0/1 表示与
u
u
u 为偶/奇数的个数。
然后考虑 up-and-down 分三种情况进行讨论即可。
1.从 u u u 子树内连出一条边向不在 u u u 子树的点连边
2.从 u u u 子树内连出一条边向在 u u u 子树不在 v v v 当前子树的点连边
3.从不在 u u u 子树的点向 u u u 子树内连边
分情况 dp 就好了
CF859E
又是分类讨论题,我们对每个人前后位置放进一个连通块。考虑一个连通块,若为树那么该连通块答案就为该块的大小。若连通块有环,相当于会发生连锁反应所以就两种情况,如果有自环那么该连通块就一种。最后乘法原理计数即可。
CF796D
我们考虑那些边可以重复,就是边的一个点 u u u 被两个特殊点都覆盖那么就可以删边。这个 bfs 模拟一下就可以了。
CF771C
又是树形 dp,我们设 f x , i f_{x,i} fx,i 表示 x x x 子树内距离 x x x 的距离 s % k = i s\%k=i s%k=i 的总步数, g x , i g_{x,i} gx,i 表示 x x x 子树内距离 x x x 的距离 s % k = i s\%k=i s%k=i 的点的个数。
f x , i = ∑ v ∈ x f v , i − 1 , g x , i = ∑ v ∈ x g v , i − 1 f_{x,i}=\sum _{v∈x}f_{v,i-1},g_{x,i}=\sum_{v∈x}g_{v,i-1} fx,i=∑v∈xfv,i−1,gx,i=∑v∈xgv,i−1
对于 i = 1 i=1 i=1 的我们的 f x , 1 = ∑ v ∈ x f v , 0 + g v , 0 f_{x,1}=\sum _{v∈x} f_{v,0}+g_{v,0} fx,1=∑v∈xfv,0+gv,0 因为要多跳一步了,所以额外要加这些贡献。
我们先算出以 1 1 1 为根的答案,然后换根dp一下即可。
于是答案就是 ∑ i ∑ j f i , j \sum_i\sum_j f_{i,j} ∑i∑jfi,j