#wXTTJlydlt60x6604dc. 看牛 Watchcow

看牛 Watchcow

好的,这是整理好的题面,不含解题思路,只包含样例解释。


题目描述

给定一个 NN 个点 MM 条边的无向图,求一条从节点 11 出发,最后回到节点 11 的路径,并且满足每条边恰好被沿着正、反两个方向分别经过一次

若有多种方案,输出任意一种即可。


输入格式

第一行两个整数 NNMM
接下来 MM 行,每行两个整数 aabb,表示点 aa 和点 bb 之间存在一条边。

输出格式

2M+12M+1 行,每行一个整数,共同描述出满足条件的一条路径。

数据范围

  • 1N1041 \le N \le 10^4
  • 1M5×1041 \le M \le 5\times 10^4

输入样例

4 5
1 2
1 4
2 3
2 4
3 4

输出样例

1
2
3
4
2
1
4
3
2
4
1

样例解释

N=4N=4M=5M=5,边: 1-2
1-4
2-3
2-4
3-4

这个图是完全图 K4K_4 去掉一条边 1-3,其余边都有。


题目要求

每条无向边 (u,v)(u,v) 必须从 uuvv 走一次,再从 vvuu 走一次,且路径从 1 开始并结束于 1。

一种可行的方案是走一个 欧拉回路(每条边恰好一次,不是两个方向各一次)吗?不是,因为这里要求两个方向各一次,等价于将每条无向边看成两条方向相反的有向边,然后求有向欧拉回路(每个点的入度等于出度),并且这里每个点度数显然是偶数,因此存在这样的回路。


样例输出分析

输出序列共 2M+1=112M+1=11 个节点编号(因为每条边两个方向各走一次,总步数 2M2M,经过 2M+12M+1 个点)。

输出: 1 → 2 → 3 → 4 → 2 → 1 → 4 → 3 → 2 → 4 → 1

检查每条边在两个方向各一次:

  • 边 1-2:
    正向:1→2(第 1 步)
    反向:2→1(第 6 步) ✅

  • 边 1-4:
    正向:1→4(第 7 步:1→4?不对,序列里第 7 个节点是 4,但上一步是 1,所以第 6 步到 1,第 7 步 1→4 其实是第 7 段路径从 1 到 4)
    实际上 1→4 在第 7 步(1→4),4→1 在第 11 步(4→1)✅

  • 边 2-3:
    正向:2→3(第 2 步)
    反向:3→2(第 9 步?第 9 步是 3→2 吗?第 8 个节点是 3,第 9 个节点是 2,所以 3→2 在第 8 步到第 9 步)✅

  • 边 2-4:
    正向:2→4(第 4 步:2→4 在第 3 步到第 4 步:3→4?不对,第 3 个节点是 3,第 4 个节点是 4,这是 3→4,不是 2→4。我们重新仔细标一下步数:
    节点序列:1(1) → 2(2) → 3(3) → 4(4) → 2(5) → 1(6) → 4(7) → 3(8) → 2(9) → 4(10) → 1(11)
    边(按节点序列的相邻看):

    1. 1-2(正向)
    2. 2-3(正向)
    3. 3-4(正向)
    4. 4-2(正向,但这是 4→2,是边 2-4 的反向)
    5. 2-1(反向)
    6. 1-4(正向)
    7. 4-3(反向)
    8. 3-2(反向)
    9. 2-4(正向)
    10. 4-1(反向)

    检查 2-4:
    正向:第 9 步 2→4
    反向:第 4 步 4→2 ✅

  • 边 3-4:
    正向:第 3 步 3→4
    反向:第 7 步 4→3 ✅

每条边都恰好在两个方向各一次,并且起点终点都是 1。


因此输出合法