分析
很明显,如果 i i i 个人会去参加,那么 Monocarp 必须得邀请 p i p_i pi,而此时 Monocarp 只需要再邀请 p p i p_{p_i} ppi,那么 p i p_i pi 就会参加,这样就已经有 2 2 2 个人参加派对了,故只需要邀请 3 3 3 个人。需要额外注意的是,如果 i i i 与 p p i p_{p_i} ppi 相等的话,只需要邀请 2 2 2 个人就行了( i i i 与 p i p_i pi)。
Code
#include<iostream>
using namespace std;
signed main() {
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int t,n,p[51];
cin>>t;
while(t--) {
cin>>n;
for(int i=1;i<=n;++i) cin>>p[i];
bool flag=false;//初始要赋值为false
for(int i=1;i<=n;++i)
if(i==p[p[i]]) {//判断i与p[p[i]]是否相等
flag=true;
break;//如果已经找到了就退出
}
cout<<(flag?2:1)<<"\n";//如果i与p[p[i]]相等输出2,反之输出3
}
return 0;
}