1 基本概念
好多都没用。
欧拉图:存在欧拉回路。
半欧拉图:不存在欧拉回路但存在欧拉路径。
2 欧拉图的判定
小学奥数。
3 欧拉回路的生成
3.1 Fluery 算法
实在不想学这玩意……
3.2 Hierholzer 算法
相信大家都会。如果觉得自己不会,那么大概率是不知道叫这个名字。
问题 3.5:字典序最小的欧拉回路。字典序按照点的序列比较。
显然从最小的点开始。每个点的出边按出点从小到大排序。然后直接跑。
正确性大概注意到回溯过程中又走了别的边(也就是拼上了另一条路径/回路),那肯定是无法避免的(不然回不去了)。所以每次都是尽可能选了最小的路径/回路拼了进去。
4 欧拉图相关的性质
说些看起来都是废话但就是会降智的东西,我能怎么办。
5 欧拉图的生成问题
5.1 De Bruijn 序列
还是杂题选讲。
不过就是给出一个思路:看起来哈密顿的,可以反客为主把表示成点变成表示成边,然后欧拉。
5.2 混合图欧拉回路
实际上就是对无向边定向使得每个点出入度相等。
随便钦定每条边的方向,然后调整。记录每个点的出入度之差,反转一条边相当于入点 (-2),出点 (+2)。
只保留原图中的无向边(且按钦定的方向连边),然后一开始差为正的从源点连,差为负的连向汇点。跑最大流,如果满流就调整成功了,然后通过每条边有没有流满还原方案。否则无解。
5.3 中国邮递员问题
每条边至少经过一次,考虑钦定每条边的经过次数,仍然要使得每个点出入度相等。
同样记录出入度之差,添加一条边的经过次数,相当于入点 (-1),出点 (+1)。
类似 5.2 的方法建图即可,不过由于要最小费用,变成费用流。同样是不满流无解。
5.4 冲国邮递员问题(?)
无向图也一样。不过只需要每个点度数变成偶数就行。但不能拆点,所以直接看成每个度数是奇数的点两两匹配,权值是最短路。然后写奇怪的一般图匹配算法。
6 欧拉图相关的计数
6.1 欧拉图计数
我寻思着这和欧拉回路有什么关系。
6.2 欧拉子图计数
我寻思着这和欧拉回路有什么关系。
我还以为是什么导出子图,结果来个这。
6.3 欧拉回路计数
正 片 开 始
6.3.1 有向图欧拉路径
给定一个有向半欧拉图 (G = (V, E)) ,求以 (1) 号点为终点的欧拉路径的数量,其中保证 (1) 号点出度比入度小 (1)。(此处论文只讨论了欧拉图,实际上个人认为半欧拉图也可以求,若有不对请指出)
(若是欧拉图,就从 (1) 开始,具体过程差不多。)
搞一个人类智慧双射。答案是 (T_1d_1!prod_{i e 1}(d_i-1)!)。其中 (T_1) 是以 (1) 为根的内向树个数,可以用矩阵树定理求。
其意义是选出一个内向树,然后对每个点不在树上的出边,定顺序。
(leftarrow):从起点(显然唯一确定)开始,按顺序走没被走过的最小的非树边,若没有就走树边。要证这是一条欧拉回路,只需证明走非树边 ((u,v)) 时它们两个弱联通即可(论文中说要 Fluery 算法?还是不想学,实际上因为前面从起点走出一条路径,应该是显然等价于欧拉图的判定条件的)。因为 (u) 还在走非树边,说明树边没被走过。其父亲因为不是最后一次到达,也说明它的没被走过。同理可以从 (v) 也推到 LCA。
( ightarrow):除了 (1) 号点,把每个点最后一次走的出边设成树边。要证明这是一棵树,也就是没有环。反证。如果有环,那么就死在这个环上了。而 (1) 显然不在环上,和 (1) 是终点矛盾。
6.3.2 有向图欧拉回路
与上面几乎一样,不过要对 (1) 走出的第一条边进行区分,也就是除掉 (d_1),得到 (T_1prod(d_i-1)!)。
这就是 BEST 定理。同时也可看出欧拉图上 (T_i) 相等。
(写到这里突然发现讨论了半欧拉图的路径数量,可以直接转成欧拉图欧拉回路。不过式子一样,应该没问题)
6.3.3 无向图欧拉路径/回路
NPC。
就这?
7 总结
正 片 结 束