一个班级内有 2n 个小朋友,编号依次为 1,2,…,2n。教室里有 n 张桌子,每张桌子可以坐两个人。坐在同一张桌子旁边的小朋友互为同桌。一个小朋友的同桌不能是自己。
老师问每个小朋友想和谁做同桌,i 号小朋友的回答是想和 pi 号小朋友做同桌。
请你帮老师判断一下,老师能否让每个小朋友都满意?
输入的第一行有一个正整数 n,表示桌子的张数。
第二行有 2n 个数 p1,p2,…,p2n,表示每个小朋友想和谁做同桌。
如果老师可以让所有小朋友都满意,则输出 Yes,否则输出 No。
3
2 1 6 5 4 3
Yes
2
1 2 4 3
No
2
2 3 4 1
No
【样例 1 解释】
老师可以让 1,2 号小朋友坐在一张桌子旁,3,6 号小朋友坐在第二张桌子旁,4,5 坐在第三张桌子旁。
【样例 2 解释】
1 号小朋友的同桌肯定不会是自己(因为每张桌子一定恰好坐 2 个小朋友)。
【样例 3 解释】
1 号小朋友想和 2 号小朋友做同桌,然而 2 号小朋友却希望和 3 号小朋友做同桌,所以不可能 1,2 号小朋友同时满意。
如果你进一步思考会发现,老师最多同时让 2 个小朋友满意。
【数据范围】
本题采用捆绑测试,一个子任务内有多个测试点,同时答对子任务内所有测试点才能拿到对应分数。
对于全体数据,保证 1≤n≤5000,1≤pi≤2n。
#include <bits/stdc++.h>
using namespace std;
int n,p[10086],m;
int main()
{
cin>>n;
m=2*n;
for(int i=1;i<=m;i++)
{
cin>>p[i];
}
for(int i=1;i<=m;i++)
{
if(p[i]!=p[p[i]])
{
cout<<"No";
exit(0);
}
if(p[i]==i)
{
cout<<"No";
exit(0);
}
}
cout<<"Yes";
return 0;
}