loj#3056. 「HNOI2019」多边形

通过观察样例我们可以得到这样的结论

先将所有和d相连的边删掉,得到一堆区间,然后旋转这些区间的顶点边,使它变得和d相连

重复上述流程直到我们得到了一堆长度为1的区间们

那么很容易的看出上面的操作流程构成了一颗树的结构,除了根节点度数不确定每个点的度数都是2

方案数也十分显然就是\[prod_{i=1}^{n}{siz(i) \choose siz(s1),siz(s2) \dots)}\]

其中\(s1,s2,\dots\)表示i的孩子们

所以难点就是如何确定二叉树的形态,剩下的都好说,因为旋转仅仅修改了树的一个局部,推推式子该乘乘该除除就完了

我们采取一个十分简单的分治方法,假设现在我们要切割\((l,r)\)这个区间了,那么我们使用一个map来存每个点的出边

现在我们需要确定这个区间将从何处分裂

猜你喜欢

转载自www.cnblogs.com/sweetphoenix/p/10986468.html