#P15919. [Roi2021]树上的小组件
[Roi2021]树上的小组件
题目描述
Vasya 最近发明了一个新游戏。考虑一个连通有向图,它有 个顶点和 条有向边,并且对于每条边 ,都存在反向边 。换句话说,这个图由一棵无向树得到:把树上的每条无向边拆成两个方向相反的有向边。
定义一个小组件为一对边 ,满足 的终点等于 的起点,或者反过来 的终点等于 的起点。特别地,一对方向相反的边也构成一个小组件。
Vasya 的游戏是把图中的所有有向边划分成若干个不相交的小组件。对于原始完整图,他当然可以做到。
后来,Vasya 的朋友 Petya 从图中删除了 条有向边。于是图中剩下
条有向边。
现在 Vasya 想知道,剩下的有向边能否划分为若干个不相交的小组件;如果可以,还需要给出一种划分方案。

第一个样例中的小组件划分示意图。
输入格式
第一行包含两个整数 ,表示顶点数和剩余有向边数。保证 为偶数。
接下来 行,每行包含两个整数 ,表示一条剩余有向边的起点和终点。
输出格式
如果无法划分,输出:
No
否则,先输出:
Yes
然后输出 行,每行包含 4 个整数,表示一个小组件中的两条边:
u1 v1 u2 v2
其中 和 是该小组件中的两条有向边。
数据范围
保证 为偶数。
样例 1 输入
5 6
1 2
2 1
1 5
2 3
2 4
4 2
样例 1 输出
Yes
1 2 2 3
2 1 1 5
2 4 4 2
样例 2 输入
4 4
2 1
2 3
2 4
4 2
样例 2 输出
No
样例 3 输入
4 4
1 2
2 1
3 4
4 3
样例 3 输出
Yes
1 2 2 1
3 4 4 3
说明
第一个样例的划分见原题示意图。
本题输入规模较大,建议使用较快的输入输出方式。
子任务
| 子任务 | 分值 | 限制 | 依赖 | 检查信息 |
|---|---|---|---|---|
| 1 | 7 | U | 第一处错误 | |
| 2 | 10 | U, 1 | ||
| 3 | 11 | 无 | ||
| 4 | 29 | U, 1-3 | ||
| 5 | 11 | 3 | ||
| 6 | 32 | U, 1-5 |