http://codeforces.com/problemset/problem/760/C

题意:有n个盘子,每个盘子有一块肉,当肉路过这个盘子的时候,当前朝下的这一面会被煎熟,每个盘子有两个数,pi代表接下来去第pi个盘子,bi为1的话,这块肉会被反面,0的话这块肉不变。对于每块肉,要让它的两面都在每个盘子里面煎过,问最少的修改次数。

思路:有两个条件:1、让图变得连通最少需要修改的方案。2、要让肉两边都被煎到要怎么考虑。

1、这个简单就是一遍DFS求出连通块数,如果连通块数是1的话,就不需要修改,如果大于1的话,那么需要修改的次数为连通块数。因为我们要把一个连通块的其中一条边指出去到下一个连通块。

2、要让肉两边都煎到,我们可以考虑成从原点出发,下一次回到原点的时候肉要是翻面的。那么,如果这样考虑,我们就只需要让翻面的次数为奇数,这样就可以保证回到原点的时候肉是翻面的了。假设为现在的图已经是连通的了,因为只有n条边,所以每个点都必定有且仅有走过一遍,那么该路径翻面的次数其实就是原来输入的1的数目,所以如果输入的1的数量为偶数的话,答案需要+1,让其变成奇数。

 #include <bits/stdc++.h>
using namespace std;
#define N 200010
#define INF 0x3f3f3f3f
int p[N], vis[N];
// 1的个数为偶数的时候无法跑到原点是反面,所以要让1的个数变成奇数
// 还有要让图变成联通的,当图已经是联通的时候,不需要变化.当图不联通的话,要修改的边数为联通块数,即将该块的一条边连到另一个联通块
void DFS(int u) {
vis[u] = ;
if(!vis[p[u]]) DFS(p[u]);
} int main() {
int n;
scanf("%d", &n);
int cnt = , ans = , b;
for(int i = ; i <= n; i++) scanf("%d", &p[i]);
for(int i = ; i <= n; i++) {
scanf("%d", &b);
if(b == ) cnt++;
}
if(cnt % == ) ans++;
cnt = ;
for(int i = ; i <= n; i++) {
if(!vis[i]) {
cnt++;
DFS(i);
}
}
if(cnt == ) cnt--;
ans += cnt;
cout << ans << endl;
return ;
}

Codeforces 760C:Pavel and barbecue(DFS+思维)的更多相关文章

  1. Codeforces 931D Peculiar apple-tree(dfs+思维)

    题目链接:http://codeforces.com/contest/931/problem/D 题目大意:给你一颗树,每个节点都会长苹果,然后每一秒钟,苹果往下滚一个.两个两个会抵消苹果.问最后在根 ...

  2. 【codeforces 760C】Pavel and barbecue

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  3. 【置换群】Codeforces Round #393 (Div. 1) A. Pavel and barbecue

    就是先看排列p,必须满足其是一个环,才满足题意.就处理出有几个环,然后把它们合起来,答案就是多少. 然后再看序列b,自己稍微画一画就会发现,如果有偶数个1肯定是不行哒,否则,它就会再置换一圈回到它自己 ...

  4. hdu6035[dfs+思维] 2017多校1

    /*hdu6035[dfs+思维] 2017多校1*/ //合并色块, 妙啊妙啊 #include<bits/stdc++.h> using namespace std; ; const ...

  5. codeforces 615 B. Longtail Hedgehog (DFS + 剪枝)

    题目链接: codeforces 615 B. Longtail Hedgehog (DFS + 剪枝) 题目描述: 给定n个点m条无向边的图,设一条节点递增的链末尾节点为u,链上点的个数为P,则该链 ...

  6. Pavel and barbecue

    Pavel and barbecue time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  7. D. Eternal Victory(dfs + 思维)

    D. Eternal Victory time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  8. CodeForces 760 C. Pavel and barbecue(dfs+思维)

    题目链接:http://codeforces.com/contest/760/problem/C 题意:一共有N个烤炉,有N个烤串,一开始正面朝上放在N个位子上.一秒之后,在位子i的串串会移动到pi位 ...

  9. CF760 C. Pavel and barbecue 简单DFS

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

随机推荐

  1. Linux C lock pages

      虚拟内存按页划分,我们可以明确告诉系统:某一个虚拟内存页需要和实际内存帧相关联.这样一来,该内存页就被换进来了,而且不会被系统换出去.这一行为叫做锁页(locking a page). 一般来讲页 ...

  2. Java Class SecurityManager

    # 前言 简单了解 SecurityManager.具体查阅 API. # What 它是 Java 沙盒模型控制安全的重要一个环节.它是 Java 的一个类.下面一段话源于SecurityManag ...

  3. wcf 代理实例

    通过过代理调用 wcf服务 using Microsoft.Extensions.Options; using System; using System.Collections.Generic; us ...

  4. js获取当前时间戳,仿PHP函数模式

    函数: /** * 获取时间戳函数 * 仿PHP函数模式 */ function time(){ var this_time = Date.parse(new Date()); this_time = ...

  5. Win8Metro(C#)数字图像处理--2.19图像水平镜像

    原文:Win8Metro(C#)数字图像处理--2.19图像水平镜像  [函数名称] 图像水平镜像函数MirrorXProcess(WriteableBitmap src) [函数代码]      ...

  6. vs2017 cordova js 签名配置

    在build.json文件中添加如下 { "android": { "release": { "keystore": "C:\\D ...

  7. WCF nginx反向代理遇到的问题

    正常配置了nginx反向代理,其他java站点什么的都正常,就wcf总是失败.始终会跑如下异常: 由于 AddressFilter 在 EndpointDispatcher 不匹配,To 为“http ...

  8. Azure 云助手主要功能

    实时查询: 实时查询Azure云服务的用量和账单,还可以将重点服务固定在首页“我的监控”页面,方便快速查看. 随时管控: 随时随地对云服务管理和配置(例如,重启.更改虚拟机). 多个账户: 随心切换多 ...

  9. Ubuntu Linux服务器搭建SSL/TLS(https)(在StartSSL可以得到免费证书)

    目录 1 生成公钥和私钥对 2 公钥提交到CA机构签发一个crt证书 3 配置证书链 4 在Apache里开启SSL支持并配置crt证书和私钥 5 配置HSTS (可选) 6 总结 首先SSL/TLS ...

  10. 更换Qt QtEmbedded库的版本出现问题及解决(交叉编译OpenSSL)

    近日将QtEmbedded库的版本由4.7.0更新到4.7.4.工具链并未改变,仍为 Target: arm-none-linux-gnueabiConfigured with: ......Thre ...