CF1708
菜鸡选手只能打 Div.2 维持生活。
这次 10min 过了 AB,实力强劲!
C(二分、贪心)
然而还是卡 C 了。
发现答案下界是 \(\sum_{i=1}^n [a_i\leq q]\)。考虑选哪些满足 \(a_i>q\) 的 \(i\)。发现选的数在所有满足条件的数中是一个后缀,并且如果最后降智为 \(0\) 是不优秀的。直接从后往前扫维护最终值并不好做,但是没关系,我们直接二分就好了。
但是上面做法实际上相当蠢。考虑最优的情况最后是 \(0\),那么从 \(0\) 开始往前倒推就可以了。虽然有可能出现直接从 \(x\) 掉到零下的情况,但是 \(x\) 能做 \(0\) 肯定是能做的。我在想的时候没有仔细探讨这一点。
感觉有些信息维护不了的时候可以套上一个二分?
D
Wrong Answer on test 7.
先瞪这个题。直觉告诉我们差分数组并不会太大。假设差分数组是 \(b_i\)。那么有关系式:\(\sum_{i=1}^{n-1}\leq a_n\)。发现本质不同的 \(b\) 只有 \(\sqrt{a_n}\) 个!那么我们开个 map 维护本质不同的元素然后暴力就好了。
令人谔谔的是我的直觉还告诉我若干个 \(x\) 答案是 \(x\)。然后寄了。
E(dfs 树)
感觉丢 D 看这个 E 可能更好。但是还是做了好久,最近好像接受了一些奇怪的 DP 技巧后魔怔了,不会推充要条件了。
显然 MST 和 dfs 树都是唯一的。考虑什么时候不合法,对于一条非树边 \((u,v)\),搜到 \(u\) 的时候如果 \(v\) 没被遍历那么就不行,搜到 \(v\) 后遍历 \(u\) 也不行,那么唯一的情况是 \(u\) 是 \(v\) 的祖先边。考虑这样做的道理,显然 \(u\) 在 MST 上走向 \(v\) 的那条边的边权小于 \((u,v)\) 的边权,所以合法当且仅当树上 \(u,v\) 为祖先-儿子关系。
怎么做都可以。
F(二项式反演、DP)
再次感到了被 DP 和容斥支配的恐惧。
我开始想定义 \(f_{i,j}\) 表示 \(i\) 子树在 \(j\) 次操作之后只剩下根的方案数。转移即考虑合并两个集合序列。这样可以 \(O(n^3)\),然后就不知道怎么优化了。
发现可以通过二项式反演放宽一些限制。考虑对于这个塔结构,去除掉 \(S_i\neq S_{i+1}\) 的条件。那么假设原答案是 \(F_i\),可以相等的条件是 \(G_i\),那么通过钦定相等的位置可以得到 \(G_i=\sum_{j\leq i}\binom{i}{j}F_j\),反演一下,问题就转化为了求 \(G\)。
考虑合法的条件:若两个属于 \(u\) 不同子树的结点 \(x,y\) 都没有被删除,那么 \(u\) 也不会被删除,这等价于如果 \(u\) 被删除,那么子树只能留一个。这可以考虑定义 \(g_{u,i}\) 表示 \(u\) 子树在 \(i\) 次操作后被删空的方案数。因为一次删完是合法的,所以可以定义 \(f_{u,i}\) 表示 \(u\) 子树在 \(i\) 次操作后还有点的方案数。显然有 \(g_{u,i}=f_{u,i-1}\)。
考虑怎么转移 \(f\),分两种情况:\(u\) 和所有结点一起删除,\(u\) 在所有结点被删完之前就删完了,换句话说 \(u\) 在删除前是/不是一个二度点。对于第一种情况,只需要子树合法即可,那么:
可以做前缀和是因为我们后面容斥掉了。
对于第二种情况,枚举最后剩下的那棵子树和 \(u\) 被删除的时间点,有:
随便前缀和一下就 \(O(n^2)\) 了。
回顾这个题,首先我们用二项式反演放宽了一个限制 \(S_{i}\neq S_{i+1}\),然后紧扣删除时间点的性质定义了表示时间点 \(i\) 被删空代表的状态 \(g_{u,i}\),从而得到了一个封闭转移。总之,容斥放宽限制的方法,切合条件定义状态的原则要时刻牢记。
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号