知识点
1. 欧拉路径定义:
图中经过所有边恰好一次的路径叫欧拉路径(也就是一笔画)。如果此路径的起点和终点相同,则称其为一条欧拉回路。
2. 欧拉路径判定是否存在:
-
有向图欧拉路径:图中恰好存在 1 个点出度比入度多 1(这个点即为 起点 S),1个点入度比出度多 1(这个点即为 终点 T),其余节点出度 = 入度。
-
有向图欧拉回路:所有点的入度 = 出度(起点 S 和终点 T 可以为任意点)。
-
无向图欧拉路径:图中恰好存在 2 个点的度数是奇数,其余节点的度数为偶数,这两个度数为奇数的点即为欧拉路径的 起点 S 和 终点 T。
-
无向图欧拉回路:所有点的度数都是偶数(起点 S 和终点 T 可以为任意点)。
注:存在欧拉回路(即满足存在欧拉回路的条件),也一定存在欧拉路径。
当然,一副图有欧拉路径,还必须满足将它的有向边视为无向边后它是连通的(不考虑度为 0 的孤立点),连通性的判断我们可以使用并查集
或 dfs
等。
题目描述
求有向图字典序最小的欧拉路径。
输入格式
第一行两个整数 n,m 表示有向图的点数和边数。
接下来 m 行每行两个整数 u,v 表示存在一条 的有向边。
输出格式
如果不存在欧拉路径,输出一行 No
。
否则输出一行 m+1 个数字,表示字典序最小的欧拉路径。
输入输出样例
输入 #1
4 6 1 3 2 1 4 2 3 3 1 2 3 4
输出 #1
1 2 1 3 3 4 2<