先序遍历与后序遍历
51Nod - 1832
当且仅当一个点只有一个儿子时,
a
n
s
ans
ans乘上
2
2
2
特判就是
a
[
l
1
]
=
=
b
[
r
2
]
a[l1]==b[r2]
a[l1]==b[r2],然后往下递归即可
计分板
51Nod - 1231
竞赛图的性质:任意
k
k
k个人的出度和
≥
k
(
k
−
1
)
2
\geq\frac{k(k-1)}2
≥2k(k−1)(也就是排序后
S
[
k
]
≥
k
(
k
−
1
)
2
S[k]\geq\frac{k(k-1)}2
S[k]≥2k(k−1))
大力
d
p
[
i
]
[
j
]
[
k
]
dp[i][j][k]
dp[i][j][k],处理到了出度为
i
i
i的人,一共用了
j
j
j个人,出度和为
k
k
k,转移时枚举当前选
d
l
t
dlt
dlt个出度为
i
i
i的人,用性质判断一下可行性即可
B君的梦境
51Nod - 1626
显然是矩阵快速幂
容易理解的四维空间:把很多个立方体排成一排,对一段立方体做同样的操作
若
2
2
2在第
4
4
4维,相当于在相邻的两个立方体的同一个位置放一个方块
若
2
2
2在其他维,相当于放一个
1
∗
1
∗
2
1*1*2
1∗1∗2的立方体
直接大力状压 2 12 2^{12} 212表示一个立方体的空位情况,然后发现有很多相同的状态(翻转、旋转、镜像之类的),最终化简只剩下95个状态
具体来讲, f [ i ] [ S ] f[i][S] f[i][S]表示第 i , i − 1 i,i-1 i,i−1个立方体的 S S S是连起来的,那么转移系数的意义就是 f [ i ] [ S ] → f [ i + 1 ] [ S ′ ] f[i][S]\rarr f[i+1][S'] f[i][S]→f[i+1][S′], i , i − 1 i,i-1 i,i−1的 S S S是连起来的, i + 1 , i i+1,i i+1,i的 S ′ S' S′是连起来的,所以 i i i中剩余的格子要自己填,这个方案数再写个状压dp预处理一下即可
Number of Components
CodeForces - 1303F
如果只考虑每次操作增加的联通块,很好处理;难搞的是减少的联通块个数
换个思维,把操作序列倒过来,那么每一步增加的联通块个数实际上就是原操作序列这一步减少的联通块个数
Sum of Prefix Sums
CodeForces - 1303G
一眼点分治
问题转化为拼两条路径:
S
1
+
S
2
+
S
⋅
k
S1+S2+S\cdot k
S1+S2+S⋅k(
S
1
,
S
2
S1,S2
S1,S2为两条路径分别的答案,
S
S
S为往上路径的权值和,
k
k
k为往下路径的长度)
然后再套一个李超维护最大值
O ( n l o g 2 n ) O(nlog^2n) O(nlog2n)