本文共 2883 字,大约阅读时间需要 9 分钟。
上一篇似乎咕咕咕了233333
来Atcoder玩耍总感觉这题也不算很难…
但是自己又还是不会做… 相当于要求你一个同时包含了黑边与白边的 M S T MST MST 遇见生成树的题,一般先联系一下最小生成树的关系 设原图的 M S T MST MST为 T T T,边权和为 S S S 先任意找出一个 M S T MST MST,对于每条不在当前 M S T MST MST的边,我们求出一个 n u m [ i ] num[i] num[i]表示他的权减去他能替换掉 M S T MST MST的边中最大的边权 然后分类讨论 如果 S > X S>X S>X,显然无解,否则设 e q = ∑ [ n u m [ i ] = X − S ] , u p = ∑ [ n u m [ i ] > X − S ] eq=\sum [num[i]=X-S],up=\sum[num[i]>X-S] eq=∑[num[i]=X−S],up=∑[num[i]>X−S] 当 S = X S=X S=X的时候,我们有两种操作,分别是就让当前的 M S T MST MST成为新图的 M S T MST MST,以及构建一个新 M S T MST MST使其满足上述条件 第一个就是 ( 2 n − 1 − 2 ) ∗ 2 m − n + 1 (2^{n-1}-2)*2^{m-n+1} (2n−1−2)∗2m−n+1,前面去除了 M S T MST MST全为黑或白的情况 第二个就是 2 ∗ ( 2 e q − 1 ) ∗ 2 u p 2*(2^{eq}-1)*2^{up} 2∗(2eq−1)∗2up,表示找出来的 M S T MST MST全为白或黑,但是能替换的边中至少有一个是可以替换使得合法的 当 S < X S<X S<X的时候,贡献就是上面的第二个自己sb
先分析一下他这种造树方法造出的是个什么树 从表面看不好看,我们考虑从小到大枚举数,即按序枚举 1 , 2 , 3.. 1,2,3.. 1,2,3..出现的位置 记录一个 m x mx mx表示当前最右的点在哪 每枚举到一个 i i i,先让他和 m x mx mx连边,再让 m x mx mx与 i i i所在的位置取 m a x max max 容易知道这就是他给出的构造方法所构出来的树 再仔细想一想的话,可以发现的是,这样的构造方法实际上是先出来一条链,链上每个点挂上一些点 那么如果原图非这样的图就gg了,判的话显然构造的链是直径,找到瞎判即可 然后再算答案 我们可以将链上每个点挂的点计数,不妨设为 c n t [ i ] cnt[i] cnt[i] 容易想到,肯定是让 c n t cnt cnt字典序最小的那一面开始挂点 那么如果枚举到链上第 i i i个点,已经用了的编号为 l s t lst lst 那么让 [ l s t + 2 , l s t + c n t [ i ] + 1 ] [lst+2,lst+cnt[i]+1] [lst+2,lst+cnt[i]+1]按序填在答案数组,在最后填上 l s t + 1 lst+1 lst+1 可以发现,这样一定是字典序最小的方案发现自己很容易忘记分析题目构造的性质…
类似从小到大加数这样的常规操作没有算复杂度qwq…
容易发现,行和列是不相关的操作 那么先枚举行放什么,再判断列能不能放好 开搜,枚举每行的匹配行与每列的匹配列 行确定之后列的确定只需要知道某列reverse之后是否与另一列同构 发现状态数极少 于是就pass了n n n不大也不小的题就有点恶心了…
注意到儿子的选择次数一定大于等于父亲,那么可以转化题意 每次选一棵子树 + 1 +1 +1,只有以 1 1 1为根的子树可以无限选其他都仅能选 D D D次感觉一下就是个容斥,脑子混乱了竟然有一个东西没想到…
用经典容斥设 f [ i ] f[i] f[i]表示至少有 i i i个非法选择方案,转载地址:http://wrmu.baihongyu.com/