首页 > Windows开发 > 详细

[APIO2018] Duathlon 铁人两项

时间:2019-07-28 22:53:50      阅读:117      评论:0      收藏:0      [点我收藏+]

传送门:铁人两项

  简述一下题目:

  给出一个(不一定联通)的图,求有多少个三元组(s,c,f)满足s,c,f都是图中的点,且存在一条从s到c的路径和一条从c到f的路径,使得两条路径没有公共点(除c以外)。

  这个题当时刚接触到圆方树,我的想法跟正解十分接近使我非常兴奋。

  这个题我们想一下如果n2的话我们要怎么做:

  枚举两个圆点s,f。路径上所有的点双中的点都可以作为c。如何方便地统计呢?首先我们建出圆方树,把圆点权值设为-1(因为正常计算有重复路径,这样直接免去容斥减的过程),方点权值设为点双的大小,则s到f的路径上的点(包括s,f)的权值和,也就是c的个数。这是n方的。

  如果枚举中间点,则很容易求出树上有多少个圆圆路径经过这个点,通过这个点的子树大小直接O(1)进行计算即可,这样我们只用把所有的点枚举一遍即可,这样是O(n)的。

  代码先咕咕咕

[APIO2018] Duathlon 铁人两项

原文:https://www.cnblogs.com/excellent-zzy/p/11261309.html

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