Don’t Really Like How The Story Ends
题意:
有n个点,m个边,现在要从1号边开始求dfs序,问最少加多少边可以是的dfs序是从1到n?
题解:
dfs序的过程中,不走到叶子节点我们是无法回溯的,这段路相当于一个链,所以我们可以用一个栈结果来存链上的点。
我们讨论各种情况:
-
如果u与u+1正好相连,就直接搜索u+1,不需要多加边
-
如果u存在一个相邻的点x还未访问,且u+1与u不相邻,此时必须加边,将u与u+1相连。因为按照dfs序,从u是要继续向下dfs,如果不加边就要遍历点x,这样dfs序就不连续了
-
如果u所有相邻的点都被访问了,u+1可以与u相连,也可以与栈内其他点连边,此时一直让u退栈,直到回到满足条件1或条件2的节点
-
如果第三种情况一直退栈,栈空了,也没有满足1和2情况的节点,此时就必须加边了,说明存在不连通部分,然后再继续dfs序走
代码:
代码待补