#P16395. 二分图令牌归位
二分图令牌归位
题目背景
星际运输站由两组完全不同的停靠区组成:红色停靠区与蓝色停靠区。每个停靠点上都有一枚带编号的令牌。一次系统故障打乱了同色令牌的位置,而运输机械臂只能跨越红、蓝停靠区之间的通道交换两枚令牌。
为了避免机械臂反复磨损同一条通道,工程师规定:绝大多数通道至多使用一次,整次修复过程中最多只能有一条通道被使用两次。请构造一套合法的交换方案,使所有令牌回到对应的停靠点。
题目描述
有一张完全二分图:
- 左部有 个红色点,编号为 ;
- 右部有 个蓝色点,编号为 ;
- 每个红色点都与每个蓝色点相连。
每个点上恰好放有一枚令牌。令牌具有颜色和编号。
初始时:
- 红色点 上放着编号为 的红色令牌;
- 蓝色点 上放着编号为 的蓝色令牌。
数组 是 的一个排列,数组 是 的一个排列。
你的目标是让所有令牌归位:
- 红色点 上最终必须放置编号为 的红色令牌;
- 蓝色点 上最终必须放置编号为 的蓝色令牌。
每次操作选择一个红色点 和一个蓝色点 ,交换这两个点上的令牌。该操作记为边 。
你输出的方案必须同时满足:
- 操作次数不超过 ;
- 每条边至多使用两次;
- 至多有一条边被使用两次,其他边均至多使用一次;
- 执行全部操作后,所有令牌均归位。
题目保证一定存在满足要求的方案。
输入格式
第一行包含两个整数 。
第二行包含 个整数:
第三行包含 个整数:
输出格式
第一行输出一个整数 ,表示操作次数。
接下来 行,每行输出两个整数 ,表示交换红色点 与蓝色点 上的令牌。
只要输出任意一组满足全部限制的方案即可。
数据范围
是 的一个排列, 是 的一个排列。
样例 1
输入
2 2
0 1
0 1
输出
0
说明
所有令牌已经位于正确位置,不需要执行操作。
样例 2
输入
2 2
1 0
0 1
输出
3
0 0
1 0
0 0
说明
边 被使用两次,其余边至多使用一次。执行三次交换后,两枚红色令牌归位,蓝色令牌也回到原位置。
样例 3
输入
4 4
1 0 3 2
1 0 3 2
输出
8
2 2
3 3
3 2
2 3
0 0
1 1
1 0
0 1
输出方案不唯一,任何合法方案都会被接受。