[APIO2018] Duathlon 铁人两项
2021-04-09 03:26
标签:cto c++ continue can mat int 取值 lld typedef 我们考虑对于这样一个三元组\(\left 显然,\(c\)的取值等于\(s\rightarrow f\)的简单路径的并集的大小减\(2\),因为\(s\)和\(f\)不能作为\(c\)。 那这个并集的大小呢? 我们先假设\(s\)与\(f\)位于同一个点双里面,则它们之间必定存在一条路径经过任何一个点\(c\)。故实际上并集大小就是点双大小。 现在它们不在同一个点双中,则并集大小则为一路上经过的所有点双的大小之和,减去割点的大小(它们被包括在两个点双之中),再减去\(2\)。 则我们发现,如果将方点的点权赋为它代表的点双的大小,圆点的点权赋为\(-1\),则圆方树上\(s\rightarrow f\)路径上所有点权之和,就等于(并集大小减二)。 因此我们实际上要求的就是所有不同的圆点点对间点权之和。 我们考虑对于路径上的一个点\(c\),它究竟被包含到多少条路径中即可。这个简单DP一下就行了。 注意这里的路径是有向路径,故记得乘二。 代码: [APIO2018] Duathlon 铁人两项 标签:cto c++ continue can mat int 取值 lld typedef 原文地址:https://www.cnblogs.com/Troverld/p/14621498.htmlII.[APIO2018] Duathlon 铁人两项
\),假如我们固定了\(s\)和\(f\),\(c\)有多少种可能的取值呢?#include
文章标题:[APIO2018] Duathlon 铁人两项
文章链接:http://soscw.com/index.php/essay/73158.html