#P17684. [IO 2025 #2] 罗斯托夫的排列
[IO 2025 #2] 罗斯托夫的排列
题目描述
顿河畔罗斯托夫市的市政府决定整理顿河沿岸的景点列表。每个景点都有一个互不相同的编号(即它的评分),需要把景点按评分从小到大排列。
然而,移动景点并不容易!只有在技术上允许移动的两个位置之间,才能交换景点。这些允许交换的位置对由城市的基础设施网络决定。
形式化地,给定一个由 个互不相同的整数组成的数组 。只有当位置对 出现在允许交换的位置对列表中时,才能执行交换操作 swap,交换 与 。
请判断能否仅通过这些允许的交换,把数组按从小到大排序。如果可以,还需要给出一组符合下述输出限制的交换操作;不要求操作次数最少。
输入格式
第一行包含一个整数 (),表示景点数量。
第二行包含 个互不相同的整数 (),表示景点的评分。
第三行包含一个整数 (),表示允许交换的位置对数量。
接下来 行,每行包含两个整数 (,),表示可以交换位置 与 上的景点。
位置对是无向的: 与 表示相同的交换。
输出格式
如果能够仅使用允许的交换把数组按评分从小到大排序,输出 YES;否则输出 NO。
如果输出 YES,在下一行输出操作次数 (),然后在下一行输出 个整数,依次表示执行的交换操作编号。一个操作编号对应输入中的一对允许交换的位置;这些位置对按输入顺序从 开始编号。如果 ,操作列表为空。
5
3 1 2 5 4
3
1 2
2 3
4 5
YES
3
3 1 2
3
1 2 3
1
2 1
YES
0