题目描述 Description

T64有一个好朋友,叫T128。T128是寄宿生,并且最近被老师叫过去当宿管了。宿管可不是一件很好做的工作,碰巧T128有一个工作上的问题想请T64帮忙解决。
T128的寝室条件不是很好,所以没有很多钱来装修。礼间寝室仅由n1条双向道路连接,而且任意两间寝室之间都可以互达。最近,T128被要求对一条路径上的所有寝室进行管理,这条路径不会重复经过某个点或某条边。但他不记得是哪条路径了。他只记得这条路径上有不少于k个寝室。于是,他想请T64帮忙数一下,有多少条这样的路径满足条件。
嗯…还有一个问题。由于最近有一些熊孩子不准晚上讲话很不爽,他们决定修筑一条“情报通道”,如果通道建成,寝室就变成了一个n个点n条边的无向图。并且,经过“情报通道”的路径也是合法的。T128心想:通道建成之前,T64还有一个高效的算法帮我数路径条数,但是通道建成之后,他还有办法吗?对,T64手忙脚乱,根本数不清有多少条路径。于是他找到了你。

输入 Input

第一行为三个正整数nmk2kn),代表有n间寝室,m条边连接它们(n1mnm=n1意味着“情报通道”未被修好;m=n意味着“情报通道”已被修好),以及题目描述中的k
接下来m行,每行两个正整数xy,代表第x间寝室与第y间寝室之间有一条双向边。

输出 Output

仅包含一个整数,代表经过至少k间寝室的路径条数。

样例输入 Sample Input

5 5 2
1 3
2 4
3 5
4 1
5 2

样例输出 Sample Output

20

提示 Hint

[树的点分治] [BZOJ3648] 寝室管理

限制 Limits

n105,knm的要求如输入
Time Limit : 4s & Memory Limit : 512MB

给出了一个基环外向树,如何点分治?
把环干掉就是普通点分治了,所以先把环干掉再考虑环对子树的影响,去环这个过程可以并查集实现。
先普通点分治一遍,对于树的情况,直接输出,下面考虑环的情况。
从断点开始,扫一遍环上的外向树,只有这棵树里的点经断掉的边到其他外向树上的点才能计入答案,因为其他的情况在普通点分治里已经统计过了。这个可以用树状数组维护。
统计的是这棵外向树上的基点(就是在环上的点)到断点一端的距离和其余外向树到断点另一端的距离和大于等于k1的情况数。
树状数组的维护可以很奇妙……
不要忘了开long long……
向因为被我霍霍坏了退役四天的TP默哀一秒……
Code

相关文章:

  • 2022-12-23
  • 2021-08-25
  • 2021-12-04
  • 2021-11-05
  • 2021-10-24
  • 2022-12-23
  • 2021-12-07
猜你喜欢
  • 2021-09-24
  • 2021-10-21
  • 2021-08-16
  • 2021-10-01
  • 2022-12-23
  • 2021-09-15
  • 2022-02-01
相关资源
相似解决方案