T2强制在线挂了qvq,结果是因为初值写错了,T3数组开小掉了10pts
其他倒还好。
T1
秀最靓的操作,写最短的代码。
其实就是我们按照(kruscal)考虑的话,我们可以把最小生成树上的边都列出来。
这是一个单调不讲的序列。
把最后一个和前面(n-2)个分别考虑,然后一个一个的削减(w[n-1])增加(w[1...n-2])就可以了。
这个过程是(O(1))的。
T2
板子题,用(LCT)维护最大独立集的(dp)即可。
具体来说对于虚实子树分别维护一下当前确定区间的左右端点(链的顶底)是否被选就可以了,虚子树的话就分别按照方程维护对选和不选的最优贡献即可。
T3
组合数学+容斥原理+生成函数
设(f_i)为恰好分成了(i)段的方案,(g_i)为至多分了(i)段的方案。
那么求出(g_i)然后二项式反演即可。
考虑(g_i)怎么求。
设:
[F(x)=prodlimits_{i=1}^{n} sumlimits_{k=1}^{a_i}inom{a_i-1}{k-1}frac{1}{k!}
]
直接分治(NTT)即可。
那么:(f_i=i![x^i]F(x))
这样就可以直接用二项式反演了,反演的过程可以发现是卷积形式。
再次卷积即可。
复杂度(O(mlogmlogn))