742 C. Arpa's loud Owf and Mehrdad's evil plan codeforces
2016-12-27 22:07
441 查看
思路:在这个集合中找到一共有多少的环,如果环中元素个数为奇数,则不变,为偶数,则除以2,最后求出所有环的最小公倍数。
#include<bits/stdc++.h>
using namespace std;
int pre[105],n,num;
bool visit[105];
void dfs(int x,int now)
{
if(visit[now])
{
num=-1;
return;
}
num++;
if(now==x)
{
return;
}
dfs(x,pre[now]);
visit[now]=1;
}
int lcm(int a,int b)
{
int aa=a,bb=b;
if(aa<bb)swap(aa,bb);
int temp=aa%bb;
while(temp)
{
aa=bb;
bb=temp;
temp=aa%bb;
}
return a*b/bb;
}
int main()
{
int now=-1,flag=0,flag1=0;
cin>>n;
for(int i=1;i<=n;i++)
pre[i]=i;
for(int i=1;i<=n;i++)
{
cin>>pre[i];
if(!visit[pre[i]])
visit[pre[i]]=1;
else
flag1=1;
}
if(flag1)
cout<<-1<<endl;
else
{
memset(visit,0,sizeof(visit));
for(int i=1;i<=n;i++)
{
if(!visit[i])
{
num=0;
dfs(i,pre[i]);
if(num==-1)
{
flag=1;
break;
}
else if(now==-1)
{
if(num%2==0)num/=2;
now=num;
}
else if(now!=num)
{
if(num%2==0)num/=2;
now=lcm(now,num);
}
visit[i]=1;
}
}
if(flag)
cout<<-1<<endl;
else
cout<<now<<endl;
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int pre[105],n,num;
bool visit[105];
void dfs(int x,int now)
{
if(visit[now])
{
num=-1;
return;
}
num++;
if(now==x)
{
return;
}
dfs(x,pre[now]);
visit[now]=1;
}
int lcm(int a,int b)
{
int aa=a,bb=b;
if(aa<bb)swap(aa,bb);
int temp=aa%bb;
while(temp)
{
aa=bb;
bb=temp;
temp=aa%bb;
}
return a*b/bb;
}
int main()
{
int now=-1,flag=0,flag1=0;
cin>>n;
for(int i=1;i<=n;i++)
pre[i]=i;
for(int i=1;i<=n;i++)
{
cin>>pre[i];
if(!visit[pre[i]])
visit[pre[i]]=1;
else
flag1=1;
}
if(flag1)
cout<<-1<<endl;
else
{
memset(visit,0,sizeof(visit));
for(int i=1;i<=n;i++)
{
if(!visit[i])
{
num=0;
dfs(i,pre[i]);
if(num==-1)
{
flag=1;
break;
}
else if(now==-1)
{
if(num%2==0)num/=2;
now=num;
}
else if(now!=num)
{
if(num%2==0)num/=2;
now=lcm(now,num);
}
visit[i]=1;
}
}
if(flag)
cout<<-1<<endl;
else
cout<<now<<endl;
}
return 0;
}
相关文章推荐
- MySQL入门教程
- 程序员面试
- Java设计模式一
- UVALive7220
- C库函数的手册
- Web-Nginx配置
- 用JAVA写查询一个字符串中是否包含另外一个字符串以及出现的次数
- 深入实践Spring boot读书笔记之Spring与Spring boot的区别
- 银行收银系统(C#)
- linux不能启动的修复技巧
- Android热修复技术选型——三大流派解析
- 【Map使用】遍历Map集合案例keySet()和 entrySet()
- Programming Exercise 5: Regularized Linear Regression and Bias v.s. Variance Machine Learning
- 基础入门_Python-模块和包.深入Celery之Beat触发定时/周期性任务?
- Linux内核中断机制(四):中断处理下
- Django part01
- linux之路由知识之ip route 命令中的疑惑
- mysqldump 导出中文乱码
- 学到javascript的函数了。
- 关于数据结构的理解超级棒的网站!!!!