【APIO2018】铁人两项
2021-06-11 06:03
标签:turn fine ++i 存在 out ++ tar lin math 题目描述 大意就是给定一张无向图,询问三元组\((s,c,f)\)中满足\(s\neq c\neq f\)且存在\((s\to c\to f)\)的简单路径(每个点最多经过一次)的数量。 \(1\leq n,\leq 10^5,1\leq m\leq 2*10^5\) 我们考虑枚举\(s,f\)然后计算中间\(c\)的数量。我们发现对于一张图上统计两点之间路径上的点数量很好做。于是我们考虑建圆方树。 我们将圆点的权值定为\(-1\),将方点的权值定为与其直接相连的圆点的数量。\(u\)到\(v\)路径上可能经过的点的数量就是圆方树上\(u\to v\)路径上除了\(u,v\)的点权之和\(-2\)。 于是我们用树形\(\text{DP}\),计算每个点对答案的贡献。 代码: 【APIO2018】铁人两项 标签:turn fine ++i 存在 out ++ tar lin math 原文地址:https://www.cnblogs.com/hchhch233/p/10574714.html【APIO2018】铁人两项
#include