Link
题意是每个点至多经过一次,“没有重复经过同一个点两次以上的简单路径”感觉怪怪的。
Solution
这是一张竞赛图 这样的问题肯定是要缩点DP的,问题是如何构造路径。
竞赛图
两点之间有且只有一条有向边 结论来了:强连通的竞赛图一定有蛤密顿回路
首先要证明任意竞赛图都有蛤密顿路径,因为需要用来构造蛤密顿回路 ,结论成立 设,结论成立,需要证明在时结论也成立 对于原有的路径 如果存在,那么存在。 否则, 如果有或者,那么存在。 假设上面的情况都不符合,那么有,,中间的点无论怎么连边都会有一个转折点,就符合了第一种情况,所以假设不成立。 所以结论成立。
关于一些扩展内容
有了蛤密顿路,来构造蛤密顿回路,主要思路是扩展已有的环 对于蛤密顿路径的前个点组成的环,现在要加入得到 (实现的时候把环拆开,维护断点,设为首尾)
- 存在,直接加入,把环尾设置为
- 存在,先把环首尾接起来,然后在处把环拆开,把接在上,把首尾设置为
- 以上都不存在,那么肯定存在有,否则就不是强连通图了。那就找到这个点,同样先把环接起来,从处拆环,把与连接,把环的首尾设置为
1 | int ce=he;Add(he,pts); |
这样先SCC,然后对于每个SCC都构造蛤密顿回路。 缩点之后,SCC之间的连边也一定是竞赛图的形式,如果有两条有向边,就成了一个SCC。也就是说,如果对于两个SCC,存在边,那就一定不存在,且一定有,存在边。 然后缩点图上进行DP,最后构造答案输出即可。
Code
1 | //Code by Lucida |