题目
题目描述
比特镇的路网由 条双向道路连接的 个交叉路口组成。
最近,比特镇获得了一场铁人两项锦标赛的主办权。这场比赛共有两段赛程:选手先完成一段长跑赛程,然后骑自行车完成第二段赛程。
比赛的路线要按照如下方法规划:
先选择三个两两互不相同的路口 和 ,分别作为比赛的起点、切换点(运动员在长跑到达这个点后,骑自行车前往终点)、终点。
选择一条从 出发,经过 最终到达 的路径。考虑到安全因素,选择的路径经过同一个点至多一次。
在规划路径之前,镇长想请你帮忙计算,总共有多少种不同的选取 和 的方案,使得在第 步中至少能设计出一条满足要求的路径。
输入格式
第一行包含两个整数 和 ,分别表示交叉路口和双向道路的数量。
接下来 行,每行两个整数 。表示存在一条双向道路连接交叉路口 。
保证任意两个交叉路口之间,至多被一条双向道路直接连接。
输出格式
输出一行,包括一个整数,表示能满足要求的不同的选取 和 的方案数。
输入输出样例
输入 #1
4 3
1 2
2 3
3 4
输出 #1
8
输入 #2
4 4
1 2
2 3
3 4
4 2
输出 #2
14
说明/提示
提示
在第一个样例中,有以下 种不同的选择 的方案:。
在第二个样例中,有以下 种不同的选择 的方案:。
子任务(注:这里给出的子任务与本题在这里的最终评测无关,仅供参考)
Subtask 1 (points: ):
Subtask 2 (points: ):
Subtask 3 (points: ): ,每个交叉路口至多作为两条双向道路的端点
Subtask 4 (points: ): ,在路网中不存在环(存在环是指存在一个长度为 的交叉路口序列 ,序列中的路口编号两两不同,且对于 从 到 ,有一条双向道路直接连接路口 和 ,且有一条双向道路直接连接路口 和 )
Subtask 5(points: ): ,在路网中不存在环
Subtask 6(points: ): ,对于每个交叉路口,至多被一个环包含
Subtask 7(points: ): ,对于每个交叉路口,至多被一个环包含
Subtask 8(points: ):
Subtask 9(points: ):
思路
对于无向图上的简单路径问题,一般我们会试用 这个优(gui)秀(chu)的东西。
对于这一题,我们需要先将每一个点双联通分量缩起来。
于是解引出了我国庆集训刚学习的 毒瘤 东西:
——圆方树
会圆方树的奆佬们请自觉忽略以下文字。
圆方树
对于圆方树这个东西,我想贴一张图:
………………………………………
定义
在圆方树中,原来的每个点对应一个圆点,每一个点双对应一个方点。
所以共有 个点,其中 是原图点数, 是原图点双连通分量的个数。
造一颗圆方树,就可以支持一些对无向图路径的操作了。聪明机智 的我又开始 盗图 了。(不要face的把图片下面的网址改成了红色。。。)
性质
有一些 显而易见 的性质:
- 对于任意无向图 均满足建出来的是森林。
- 对于任意连通无向图 均满足建出来的是一颗无根树。
- 方点只能和圆点相邻,同样,圆点只能和方点相邻。
- 如果两个方点有公共相邻的圆点,那这个圆点就是这两个方点代表的点双的割点。
- 原图的割点是圆方树中度数 的圆点。
- 方点的点度是点双联通分量的大小。
我不知道(编不下去)了……
构建
似乎很简单?
首先 缩点,把每个大小超过 的环里面的所有点都向一个新点(方点)连边。
然后把多出来的连接两个圆点的边直接给连上。
就完事了。。。
那么这题怎么做呢?
这好像就是一道圆方树裸题。
具体见下:
- 把圆方树建出来,在树中任意枚举两个圆点作为 和 ,然后考虑 有多少种选法,两个点路径上每个点双中的点都可以选。
- 令每个圆点的权值为,每个方点的权值为点双大小,可以得到答案就是两点之间的点权和,也就是说我们要求圆方树上 条圆点到圆点的路径的权值和。
- 可以想到计算每个点被算了多少次,可以用一遍得到。这样就可以在线性的时间内做完这题了。????
代码
……(待更)(其实就是不会)