Processing math: 100%

test20190816

点分治爆栈祭.

phantasm

将每次选择的位置看成一个数列,第一个位置必定是 1 ,所以只需要求出它的差分序列方案数.

差分序列中共 m1 个元素,每个元素必须 k ,总和为 n1 .

调整一下后用隔板法处理,答案是组合数,在模 2 意义下,根据 Lucas 定理,只需判断二进制位即可.

skylines

直接大力点分治预处理所有点的答案.

枚举子树时正反顺序都做一次,再考虑上分治中心.

时间复杂度 O(nlogn+T) .

kiseki

题面写得太垃圾了.

每次从已有的数中选一个,得到它的权值,并获得它的后继,存档可以重复获得.

考虑 dp ,状态只与当前有的存档集合有关,与顺序无关.

而从小到大排序后,相邻两项的差分值只可能是 0/1 ,所以可以用一个二进制数 S 来记录.

f(i,S) 表示有 i 个存档,差分值的状态是 S 的方案数,转移时枚举增加的存档.

总方案数是 m! ,预处理差分状态 S 对应的序列权值是 val(S) ,答案就为

Sf(m,S)m!val(S)

时间复杂度 O(m2m) .

Gitalking ...