其他分享
首页 > 其他分享> > [APIO2018] Duathlon 铁人两项

[APIO2018] Duathlon 铁人两项

作者:互联网

传送门:铁人两项

  简述一下题目:

  给出一个(不一定联通)的图,求有多少个三元组(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