#C1015. 分组

分组

【题目描述】

一个班级里有 NN 个人,第 ii 个人有最好的朋友 aia_iaiia_i \ne i),和性别 bib_ibi{1,2}b_i \in \{1, 2\})。

一次活动老师希望将学生分成两两一组,每一组由一个人和他的最好的朋友组成。显然这可能无法实现,但是老师还是希望划分出最多的组。在划分出最多的组的前提下,老师还希望异性的组尽可能多。

请回答最多的组数及在最多组数的前提下的最多异性组数,并输出方案。

【输入格式】

friend.in 读入数据。

输入的第一行一个整数 NN

输入的第 i+1i + 11in1 \le i \le n) 行两个整数 aia_ibib_i

【输出格式】

输出数据到 friend.out

第一行两个整数 mmkkmm 表示分的组数,kk 表示最多的异性组数。

接下来 mm 行,每行两个整数表示一组两个人的编号。

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

【样例 1 输入】
5
5 2
3 2
5 1
2 1
4 2
【样例 1 输出】
2 2
5 3
4 2
【样例 2】

见选手目录下的 friend/friend2.infriend/friend2.ans

该样例满足测试点 1,2,31,2,3 的约束条件。

【样例 3】

见选手目录下的 friend/friend3.infriend/friend3.ans

该样例满足测试点 1,2,31,2,3 的约束条件。

【样例 4】

见选手目录下的 friend/friend4.infriend/friend4.ans

该样例满足测试点 7,8,9,107,8,9,10 的约束条件。

【数据范围】

对于 100%100\% 的数据,1N1051 \le N \le 10^51aiN1 \le a_i \le Naii\forall a_i \ne ibi{1,2}b_i \in \{1,2\}

测试点编号 nn\le 特殊性质
1,2,31,2,3 1010
4,5,64,5,6 100100
7,87,8 10510^5 bi=1\forall b_i=1
9,109,10

【提示】

提供了 checker.cpp,保证与评测使用的完全不同不保证能成功判断你的代码正误,你需要通过如下指令使用,正确会说AC,错误我也不知道会说什么。

编译:g++ checker.cpp -o checker -std=c++14 -Wall -O2

运行:./checker friend.in friend.out friend.ans