欧拉图

· · 个人记录

概述

定义

判定

无向图

有向图

求欧拉路

Hierholzer 算法

可以证明一件事情,就是从欧拉图的任意点/半欧拉图的 s 出发做 dfs,应当能找到一个欧拉路,但可能顺序不对。

考虑大环上套了小环的情况,有可能在分歧点没有进小环而是把大环跑完了,退栈到分歧点才进小环。

怎么把它按正确顺序输出?

我们观察到入栈序完全不连续,一定没希望。考虑出栈序。出栈序是连续的欧拉路!

故每当一个点出栈,把它扔进答案序列。最后倒序输出(有向半欧拉图上不倒序就不是欧拉通路了)。

复杂度为 O(n+m)

注意,这里的 dfs 只是个说法,实际上我们是按某条边是否被访问决定是否更深地 dfs。换言之,一个点会被访问很多遍,它的边集也会被反复遍历,所以会被卡,需要当前弧优化。

求最小字典序欧拉路

例题

P6628 [省选联考 2020 B 卷] 丁香之路