标签:森林 有一个 最小 play spl 函数 xor 二分 alpha
对于任意一种度数序列,都可以生成一棵对应的树。
每个点度数\(\geq 1\),\(-1\)后等于\(n\)个点分\(n-2\)个度数。
\(O(n^3)\)dp:\(f_{i,j}\)表示前\(i\)个点,度数和为\(j\)的最优解,转移的时候枚举新点度数。
实际上不需要限制非\(0\)数的个数,直接枚举度数做完全背包,\(O(n^2)\)。
dp时很多状态是非必要的,通过一些转化,去掉它们就可以优化很多。
(顺便一提,模数是ntt模数,然而这题和ntt没什么关系)
\(f_{i,j}\)表示第\(i\)个单位,血量为\(j\)的概率。
询问的时候对每个单位算出\(g_{i,j}\),表示除了第\(i\)个单位之外,有\(j\)个单位存活的概率。先把所有单位的背包算出来,每个单位的\(g_i\)相当于退一个背包,用除一个\(ax+b\)的方法,可以做到单次\(O(n^2)\)。
复杂度\(O(nm+n^2C)\)。
一种dp:设\(f_{\{a_1.…,a_n\}},a_i=\{0,1,2\}\),表示每个点没选/选了,是/不是叶子的方案数。
然后这个dp被ytq枪毙了。
考虑容斥,枚举叶子集合,剩下的点Matrix-Tree求出生成树个数,然后把叶子挂在生成树下面。用fmt/fwt优化容斥,复杂度\(O(3^n)\)。
\(x^2\leq 500\)的质数最多\(8\)个。
意味着对于一个数,不属于这些质数的质因子最多一个。
枚举\(8\)个质因数中每个属于\(S,T\),还是都不属于。dp大质数各自属于哪个集合即可。复杂度\(O(3^8\cdot n)\)。
插头dp经典问题。
设\(f_i\)表示以\(i\)为根的子树的sg函数,对每个点暴力dfs,\(O(n^2)\)暴力很好做。
发现一个儿子转移到父亲,它的子问题的sg函数,需要整体xor上一个值,用trie维护,直接线段树合并就可以了(\(01\)trie的本质就是一个二进制分组的权值线段树)。
建\(2n\)个点分别表示第\(i\)行和第\(i\)列。对于\((x,y)\)的球,从\(x\)行向\(y\)列连边,边权为\(x+y\)。每次激活一个点,等于选了与它相连的剩余权值最小的边。
考虑合法的方案,要求每个连通块边数等于点数,且每个点出度为\(1\)。发现是一个基环内向树。
环上枚举顺时针或逆时针,树上可以直接树dp。
设\(f_{i}\)表示最后一次在\(x_i\)处回头的最小时间,列出暴力方程:
\[f_i=\max_{j<i}\{f_j+x_i-x_j+\max(2(x_i-x_j),T)\}\]
取\(\max\)表示路程太短没法生成硬币,需要等一会。
拆成两部分dp,对于\(\max=T\)的一部分,可以单调队列优化。否则就是一个前缀最小值。可以线性完成。好水啊
有个比较显然的\(O(n\sqrt n)\)做法,即枚举平方根,对每个平方根用单调队列优化。
四边形不等式:若\(w_{i,j}\)满足内内+外外\(\geq\)内外+外内,则称\(w_{i,j}\)满足四边形不等式,利用\(w_{i,j}\)转移的方程满足决策单调性。
利用决策单调性优化方程需要快速算出\(w_{i,j}\),或\(w_{i,j}\)满足莫队性质。
一般情况下是分治计算,即,暴力算出\(mid\)处的最优位置,然后递归两边。
暴力做法:枚举中位数\(\mu\),每条边拆成\(a_i,2\mu-a_i\)两条边,分别为黑和白。就转化为了\(k\)白边最小生成树,wqs二分即可。复杂度\(O(nm\log a\cdot \alpha(n))\)。
结论:最大生成树只包含\(w\geq \mu\)的黑边和\(w<\mu\)的白边。
发现枚举\(\mu\)的操作只对白边有影响,可以和wqs二分放到一起,复杂度\(O(m\log a\cdot \alpha(n))\)。
答案等于所有过程进位次数加上最后保留的\(1\)的个数,所以操作顺序对答案没有影响。
\(f_{i,j}\)表示前\(i\)位,这一位被加了\(j\)次的期望,则\(f_{i,j}\)可以转移到\(f_{i+1,\lfloor\frac{j}{2}\rfloor}\)。
操作等于乘以一个\(p_ix+(1-p_i)\)的多项式,可以分治fft。
假设某个位置操作了\(y\)次,则它最多进位\(\log_2y\)次,相当于每个多项式最多前进\(\log\)步。只需要处理有用的部分即可。复杂度\(O(n\log^2n)\)。
标签:森林 有一个 最小 play spl 函数 xor 二分 alpha
原文地址:https://www.cnblogs.com/suwakow/p/11375076.html