A. gift
讲过的原题,然而考场感觉T2T3更可做所以没有给多长时间。
假如当前序列已经确定,那么将每个位置对应的两个数连一条边,最终的最少操作次数就是$n-$环的个数。
所以我们现在只需要求出来形成$k$个环的方案数。
假如不考虑0,那么原图会形成若干个环和链,环不用考虑,只需要考虑链经过变换形成环的方案数。
首先将链分类,分为$0->x$或$x->0$或$0->0$,先考虑前两种。
由于前两种之间的合并需要用到第三种,所以先考虑内部的贡献。
设$f_i$表示$n$条链恰好形成$i$个环的方案数,那么这个东西可以枚举其中的多少条链构成了这些环,这样做的方案数是确定的,也就是斯特林数。
然后将前两种情况的数组卷积一下就可以得到前两种情况的总贡献。
然后对于第三种情况,他内部形成环的方案数就是带标号的斯特林数,乘上阶乘就行了。
然后考虑前两种和第三种组合的贡献,实际上就是再进行一次卷积。
B. girls
发现总的贡献可以通过简单容斥得到。
然后就变成了简单的统计至少不满足零对限制,一对限制,两对限制,三对限制的方案数,前面几个都可以线性简单搞。
可以发现,最后一个就是三元环计数,给边定向之后直接做行了。
C. string
大约是一道套路的模板题。
考场上打了lct,当时打完就剩半个小时了,T1还没打,一想LCT估计不会很好调,不一定调的出来然后直接暴跳祖先链更新就ac了。
对于每个串分别维护一下endpos集合大小,然后由于强制在线就是套路的LCT,没什么特殊的操作直接链上加就可以了。