➤ Problem Link : 741A. Arpa's loud Owf and Mehrdad's evil plan
✅ C++ Solution :
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
int arr[101];
bool visited[101];
int sz;
int lcm(int x, int y)
{
return (x*y)/__gcd(x,y);
}
void dfs(int v)
{
sz++;
if(arr[v]==v)
{
return;
}
if(!visited[arr[v]])
{
visited[arr[v]]=1;
dfs(arr[v]);
}
}
int main()
{
int n;
cin>>n;
int in[101]={0};
memset(visited,0,sizeof(visited));
bool flag=1;
for(int i=1;i<=n;i++)
{
cin>>arr[i];
in[arr[i]]++;
}
for(int i=1;i<=n;i++)
if(in[i]!=1)
{
flag=0;
break;
}
int ans=-1;
if(!flag)
cout<<"-1";
else
{
for(int i=1;i<=n;i++)
{
if(!visited[i])
{
visited[i]=1;
sz=0;
dfs(i);
if(sz%2==0)
sz/=2;
if(ans==-1)
ans=sz;
else
ans=lcm(ans,sz);
}
}
cout<<ans;
}
}
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!
