题目
给N个点M条边的图,可能有自环,没有重边。问:有多少条路径能恰好经过M−2条边2次,并且经过其余2条边1次。路径的不同定义为:路径中的边集不同。
数据范围
$0\leq N,M\leq 10^6$
做法
将M条边恰好经过2次可以转化为:将每条边变成2条边,这2M条边恰好经过一次,即走一个欧拉路。由于不存在度数为奇数的点,故欧拉路必存在。
原问题可以规约为:从上文的图中删去2条边,有多少种删法使得剩下的图中仍存在欧拉路。
欧拉路存在的等价条件为:没有孤立的边并且有0个或2个度数为奇数的点。
所以,若原图中没有孤立的边,那么有3种删法:(1)删去2个自环。(2)删去1个自环和一条普通边。(3)删去2个有公共顶点的边。若原图中有孤立的边,则不存在这种路径。
代码
|
|