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来存每个点的出边

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

posted @ 2019-06-06 18:30  sweetphoenix  阅读(119)  评论(0编辑  收藏  举报