LOJ2155 「POI2011 R1」同谋者 Conspiracy
给定一张无向图,将 (n) 个点分为两个点集,使得其中一个是团,另一个是独立集,求方案数
(nleq5000)
假设已经求出了一组合法解,解集一定由该合法解 把团中一个点放到独立集、把独立集中一个点放到团、交换团与独立集中的一个点 这三种情况构成
构造合法解可以 2-SAT 。若两点 (u, v) 之间有边,看作两点不能同时放入独立集;否则,看作两点不能同时放入团
LOJ2156 「POI2011 R1」棒棒糖 Lollipop
给一个由 (1, 2) 构成的序列,多次询问是否有一段区间和为 (k) ,并求一组解
(n, qleq10^6)
假设当前有区间 ([l, r]) ,和为 (sum) ,若 (l<r) ,一定可以构造出 (sum-2)
证明:若 (a_l, a_r) 两数中有一个是 (2) ,将 (2) 减去即可;否则,将 (l, r) 都向内挪一位
因此找到长度最大的和为奇数/偶数的区间,并记录答案即可
URAL1441 From the History of Gringotts Bank
给定一张无向图,将边集拆分成若干条路径(不要求是简单路径),使得每条边恰好被经过一次,最小化路径数量,输出方案
(n, mleq2 imes10^4)
当一个连通块内只有 (0) 或 (2) 个度数为奇数的点时,欧拉路径即是答案
考虑将连通块中的度数为奇数的点两两匹配,把剩下的边用欧拉回路插到答案里,总共使用 (frac{度数为奇数的点}{2}) 条链,可以发现这样是最优解
匹配度数为奇数的点可以找一棵生成树,从底向上匹配,时间复杂度 (O(n+m))
URAL2047 Maths
构造一个长为 (n) 的整数序列 (a_i) ,满足:
- (a_iin[1, 300])
- (forall kin[2, n], displaystylesum_{i=1}^ka_i) 有恰好 (a_k) 个约数
(nleq10^5)
由于一个合法序列的前缀也一定是合法序列,可以从权值和入手,记 (f_i) 为序列和为 (i) 时的最大合法长度,易知转移为 (f_i=f_{i-d(i)}+1) ,其中 (d(i)) 为 (i) 的约数个数
通过打表可以发现 (n=10^5) 时需要用到的值域不会超过 (1.6 imes10^6) ,暴力 dp 即可
URAL1310 ACM Diagnostics
定义一个长为 (L) 的整数串是合法的,当且仅当:每个元素值域在 ([1, M]) ,且元素和是 (K) 的倍数
求字典序第 (N) 的合法串
(Lleq100; M, Kleq50)
使用高精,二分之后暴力数位 dp ,会 TLE
确定了前缀的若干位后,实际上只关心剩下的位置中,和(mod K=) 某个数时的方案数,这是一个定值,可以预处理