A. young
大概的意思是,将原图根据最高的二进制位分成两个部分,那么只要在这两个部分之间连一条边,统计这条边的方案数就可以统计贡献。
为了辅助转移,可以考虑枚举最小边的权值,之后就可以根据最高位的不同继续分成两个集合,于是可以递归下去求解。
然而并没有改。
B. Simple
难点大概在于第一步。
如果这个数中出现了循环节,那么一定不合法。如果没有循环节,那么将所有排列枚举出来,发现只有字典序最小的那一个数是合法的。于是所有没有循环节的数循环同构之后都必然会对答案贡献1。
于是只要求没有循环节的数的个数,发现这个东西和约数有很大关系,推一推可以发现是莫比乌斯,于是直接容斥就好了。
然后再推一推式子,发现要求的是$i*\mu(i)$的前缀和,卷上$id$就变成了$e$,于是直接杜教筛就好了。
C. 小 H 爱染色
似乎没有想象中那么难。
推式子,发现只需要$ans(n)=\sum\limits_{i=0}^{n-m} f(i)*C_{n-i}^{m}^{2}$,将相邻两项做差就是答案。
由于组合数是个$m$次多项式,$f$是个m次多项式,所以ans是个$3*m+1$次多项式,所以只要求出前$3m+2$项就可以暴力插值出第N项。
所以直接暴力NTT优化插值求出$f$然后暴力NTT求出$ans$就可以愉快的TLE了,然后去卡一年常就可以AC了。
然而这似乎并不是正解。由于我们只需要求两项的值,所我们并不需要$ans$这个多项式,实际上只要在n处的取值正确就可以了。
于是可以构造另一个多项式,使得这个多项式与$ans$在n处的取值相同即可,并且这个多项式的前$3m+2$项易于求出。
所以可以省掉一次NTT。
并不是很理解。