LINK

题意:给出n个数,\(a_i\)代表下一步会移动到第\(a_i\)个位置,并继续进行操作,\(b_i\)1代表进行一次翻面操作,要求不管以哪个位置上开始,最后都能满足

1.到达过所有位置

2.对到达的任意位置,都已经进行过奇次和偶次翻面操作

交换任意两个\(a_i\),或修改\(b_i\)的值算做一次操作

问最小操作数。

思路:首先可以知道,要满足条件1,必须使该排列的循环节长度为1(即所有数成一个环),再者要满足条件2,则\(b_i==1\)必须有奇数个。

那么很简单,对所有未标记的数dfs一遍,进行的dfs次数就是循环节长度,再统计\(b_i\)中1的个数即可。

/** @Date    : 2017-04-09 21:10:36
* @FileName: 760C DFS.cpp
* @Platform: Windows
* @Author : Lweleth (SoundEarlf@gmail.com)
* @Link : https://github.com/Lweleth
* @Version : $Id$
*/
#include<bits/stdc++.h>
#define LL long long
#define PII pair
#define MP(x, y) make_pair((x),(y))
#define fi first
#define se second
#define PB(x) push_back((x))
#define MMG(x) memset((x), -1,sizeof(x))
#define MMF(x) memset((x),0,sizeof(x))
#define MMI(x) memset((x), INF, sizeof(x))
using namespace std; const int INF = 0x3f3f3f3f;
const int N = 2e5+20;
const double eps = 1e-8; int a[N], b[N];
int vis[N];
void dfs(int x)
{
vis[x] = 1;
if(vis[a[x]] == 0)
dfs(a[x]);
} int main()
{
int n;
while(cin >> n)
{
MMF(vis);
for(int i = 1; i <= n; i++)
scanf("%d", a + i);
for(int i = 1; i <= n; i++)
scanf("%d", b + i);
int ans = 0;
int cnt = 0;
for(int i = 1; i <= n; i++)
{
if(!vis[i])
dfs(i), ans++;
if(b[i])
cnt++;
}
if(ans == 1)
ans--;
printf("%d\n", ans + ((cnt%2)?0:1));
}
return 0;
}

最新文章

  1. XShell 无法匹配的outgoing encryption算法 ,No matching outgoing encryption algorithm found
  2. 一个简单的javascript深拷贝
  3. x:Name标记特性与Name属性
  4. InitializeComponent System.StackOverflowException
  5. 7、SpringMVC源码分析(2):分析HandlerAdapter.handle方法,了解handler方法的调用细节以及@ModelAttribute注解
  6. hdoj 1799 循环多少次?
  7. Java Interface and Abstraction
  8. 关于git status
  9. ng-class css样式
  10. Chrome不支持NPAPI的信息与替代方案
  11. Delphi中的Rtti函数
  12. “String.h” 源代码总结
  13. app测试--稳定性测试
  14. Nodejs的多线程
  15. Python-老男孩-03_socket
  16. 生成3位的序列号_仅仅CASE WHEN的简单应用
  17. IIS 设置查询字符串长度
  18. 引用变量 php面试总结1
  19. BZOJ2351[BeiJing2011]Matrix——二维hash
  20. 如何查看Mac电脑的处理器核心数目-CPU的核心数目

热门文章

  1. 【Alpha】阶段第一次Scrum Meeting
  2. TensorFlow:NameError: name ‘input_data’ is not defined
  3. OOP 1.5 类和对象的基本概念与用法1
  4. erlang init:stop()不起效
  5. [mysqld_safe]centos7 mysql 安装与配置
  6. 如何在一台 web 服务器上注册CA证书
  7. Redis 请求应答模式和往返延时 Pipelining
  8. [LeetCode] MaximumDepth of Binary Tree
  9. collection 在创建迭代器后 不能在添加数据 否则会出现并发问题
  10. CodeChef KnightMov