题目描述
有 𝑛 个人,编号分别为 1 到 𝑛,我们需要将他们两两配对。
每个人有且只有一个愿意组队的对象,其中第 𝑖个人的组队对象为 𝑎𝑖。若 𝑖 的组队对象是 𝑗 而 𝑗 的组队对象也是 𝑖,那么这两个人可以组队。
请问这些人可以组成多少个队伍。
输入格式
- 第一行:一个整数 𝑛
- 第二行:𝑛 个 整数 𝑎1,𝑎2,…,𝑎𝑛,其中 𝑎𝑖ai 表示𝑖 号愿意组队的编号。
输出格式
- 单个整数,表示成功组队数量。
数据范围
- 对于 30%30% 的数据,2≤𝑛≤10
- 对于 60%60% 的数据,2≤𝑛≤10002
- 对于100%100%的数据,2≤𝑛≤100000,
- 数据保证 𝑎𝑖≠𝑖
>>>>>>分割线>>>>>>>>>>>>>分割线>>>>>>>>>>>>>分割线>>>>>>>>>>>>>分割线>>>>>>>
思路
用数组存储配对的对象,数组下标就是自己
程序
#include<bits/stdc++.h>
using namespace std;
int a[100005];
int n;
int ans=0;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for (int i=1;i<=n;i++)
{
if (a[a[i]]==i)
{
ans++;
}
}
cout<<ans/2;
return 0;
}