#P14888. [OOI2019预选赛long]Обмены в перестановке 排列中的交换
[OOI2019预选赛long]Обмены в перестановке 排列中的交换
题目描述
给定一个由 到 的整数构成的排列 ,以及 对下标。
一次操作中,你可以选择这 对下标中的任意一对,并交换排列中这两个位置上的元素。你可以执行任意多次操作,当然也可以一次都不执行。
定义长度为 的递增子序列为一组下标 ,满足:
并且:
请问通过合理交换元素,最终排列的最长递增子序列长度最大可以达到多少?
输入格式
第一行包含两个整数 ,表示排列长度和允许交换的位置对数量。
第二行包含 个两两不同的整数 ,表示排列元素。
接下来 行,每行包含两个整数 ,表示位置 和 上的元素可以交换。
满足:
$$1 \le n \le 10^4,\quad 0 \le m \le \min\left(10^5,\frac{n(n-1)}{2}\right),$$$$1 \le a_i \le n,\quad 1 \le u_i,v_i \le n,\quad u_i \ne v_i.$$保证输入中的位置对不重复。
输出格式
输出一个整数,表示经过若干次允许交换后,能够得到的最长递增子序列的最大长度。
样例
样例 1
6 2
5 2 4 6 3 1
5 6
1 5
4
样例 2
4 2
2 1 4 3
1 3
2 4
3
样例解释
考虑第一个样例中的排列:
[5, 2, 4, 6, 3, 1]
先交换位置 和 上的元素,得到:
[5, 2, 4, 6, 1, 3]
再交换位置 和 上的元素,得到:
[1, 2, 4, 6, 5, 3]
此时最长递增子序列长度为 ,例如可以取子序列:
[1, 2, 4, 6]
子任务
| 组别 | 分数 | 必须通过的组 | 说明 | ||
|---|---|---|---|---|---|
| 0 | — | — | 样例测试 | ||
| 1 | 7 | ||||
| 2 | 8 | — | 0,1 | ||
| 3 | 10 | 0,1,2 | |||
| 4 | 17 | 0,1,2,3 | |||
| 5 | 18 | 0,1,2,3,4 | |||
| 6 | 40 | — | 0,1,2,3,4,5 | 离线测试 | |