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