圆方树
点双联通分量:
对一张图,若其不含割点,则其为一个点双。
1,对于点双中的两个点(除只有两点一边的特殊图),可以视作其必然存在两条不同的简单路径,使两者经过的并集为空。
2,对于点双中任意一对点,经过它们的简单路径的并集一定为点双本身,意即可以认为两点间简单路径可以通过点双内任意一点。
圆方树:
圆方树:对于一张无向图,将其点双求出,而后将点双视作方点,将原图点视作圆点,将一点双内所含的点代表圆点与该方点相连,一来就会形成一颗树(原图联通)。
那么就会有良好的性质,如可以直接发现的是,两点间路径可以经过的点可以用圆方树上所有方点包含,也就是若有与点相关信息可以使用方点记录,而后利用树来快速求出路径经过问题。
P4630 [APIO2018] 铁人两项
题
题目描述
比特镇的路网由 \(m\) 条双向道路连接的 \(n\) 个交叉路口组成。
最近,比特镇获得了一场铁人两项锦标赛的主办权。这场比赛共有两段赛程:选手先完成一段长跑赛程,然后骑自行车完成第二段赛程。
比赛的路线要按照如下方法规划:
- 先选择三个两两互不相同的路口 \(s\)、\(c\) 和 \(f\),分别作为比赛的起点、切换点(运动员在长跑到达这个点后,骑自行车前往终点)、终点。
- 选择一条从 \(s\) 出发,经过 \(c\) 最终到达 \(f\) 的路径。考虑到安全因素,选择的路径经过同一个点至多一次。
在规划路径之前,镇长想请你帮忙计算,总共有多少种不同的选取 \(s\)、\(c\) 和 \(f\) 的方案,使得在第 \(2\) 步中至少能设计出一条满足要求的路径。
输入格式
第一行包含两个整数 \(n\) 和 \(m\),分别表示交叉路口和双向道路的数量。
接下来 \(m\) 行,每行两个整数 \(v_i, u_i\)。表示存在一条双向道路连接交叉路口 \(v_i, u_i\)(\(1 \le v_i, u_i \le n\),\(v_i \neq u_i\))。
保证任意两个交叉路口之间,至多被一条双向道路直接连接。
输出格式
输出一行,包括一个整数,表示能满足要求的不同的选取 \(s\)、\(c\) 和 \(f\) 的方案数。
- Subtask 9(points: \(10\)):\(n \leq 100000\),\(m \leq 200000\)。
析:
有关无向图路径经过的点,可以尝试跟圆方树建立联系。
显然有在图上指定两点,他们在圆方树上对应圆点路径经过方点所包含的点就是他们在原图上可经过的路径中的点,考虑如何计数,发现对于方点,显然直接设权值为方点大小,为防止重复,将圆点权值设为-1,一来两圆点间路径的权值和即为选择方案数。
最后,考虑如何计数,不妨反着来想,考虑一点对答案的贡献,可以树形dp求出一点不同方向圆点个数,相乘得出经过该点的路径条数,乘以权值累加到答案上即可。