首页 > 其他 > 详细

loj#3056. 「HNOI2019」多边形

时间:2019-06-06 19:09:12      阅读:111      评论:0      收藏:0      [点我收藏+]

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

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

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

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

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

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

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

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

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

loj#3056. 「HNOI2019」多边形

原文:https://www.cnblogs.com/sweetphoenix/p/10986468.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!