原题链接

题意
俄罗斯套娃,给出一个初始状态和终止状态,问至少需要多少步操作才能实现状态转化

贪心做法
如果完全拆掉再重装,答案是p[i]和q[i]中不为0的值的个数。现在要求寻找最小步数,显然要减去一些多余的步数。如果初始的一些链的前端是终止的某一条链的连续的一部分,那么这条链就不用被拆开再连上,这样每一个长度为x的链对答案的贡献就是-2*(x-1),对每条链进行同样的操作之后就是答案

#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define ll long long
#define ull unsigned long long
#define LOCAL using namespace std;
const int maxn=1e5+;
const int inf=0x3f3f3f3f;
const int mod=1e9+; int p[maxn],q[maxn];
int n;
int main(){
scanf("%d",&n);
int vis[maxn];
int ans=;
for(int i=;i<=n;i++){
scanf("%d",&p[i]);
if(p[i]) vis[p[i]]=,ans++;
}
for(int i=;i<=n;i++){
scanf("%d",&q[i]);
if(q[i]) vis[q[i]]=,ans++;
} for(int i=;i<=n;i++){
if(!vis[i]){
int x=i;
while(p[x]&&q[x]&&p[x]==q[x]){
ans-=;
x=p[x];
}
}
}
printf("%d\n",ans);
return ;
}

并查集

只能进行2个操作:
1、 把一个没有父节点的节点作为一个 没有父节点和子节点的节点的子节点,代价为 1;

2、把一个没有父节点的节点的子节点去掉,代价为1;

那么只能对free的节点进行操作,所以当ai!=bi时,要先把ai拆掉,但必须先满足ai为free才能把i变成free,
同理把i插到bi上时也要满足bi节点为free(即该节点没有父节点)。

#include <iostream>
#include <cstdio> using namespace std;
typedef long long LL;
const int MAXN = 1e5 + ; int a[MAXN], b[MAXN], fa; int main()
{
#ifdef LOCAL
freopen("f.txt", "r", stdin);
//freopen("f.out", "w", stdout);
int T = ;
while(T--){
#endif // LOCAL
ios::sync_with_stdio(false); cin.tie(); int n, i, ans = , t;
cin >> n;
for(i = ; i <= n; i++){
cin >> a[i];
}
for(i = ; i <= n; i++){
cin >> b[i];
}
for(i = ; i <= n; i++){
if(a[i] == b[i]) continue;
if(a[i] != ){
ans++;
fa = a[i];
a[i] = ;
while(a[fa]){
t = fa;
fa = a[fa];
a[t] = ;
ans++;
}
}
}
for(i = ; i <= n; i++){
if(a[i] == b[i]) continue;
if(b[i] != ){
fa = a[b[i]];
if(fa){
a[b[i]] = ;
ans++;
}
else{
continue;
}
while(a[fa]){
t = fa;
fa = a[fa];
a[t] = ;
ans++;
}
}
}
for(i = ; i <= n; i++){
if(a[i] == b[i]) continue;
ans++;
}
cout << ans << endl;
return ;
}

GYM 101173 F.Free Figurines(贪心||并查集)的更多相关文章

  1. POJ 1456 Supermarket(贪心+并查集)

    题目链接:http://poj.org/problem?id=1456 题目大意:有n件商品,每件商品都有它的价值和截止售卖日期(超过这个日期就不能再卖了).卖一件商品消耗一个单位时间,售卖顺序是可以 ...

  2. Codeforces 437D The Child and Zoo(贪心+并查集)

    题目链接:Codeforces 437D The Child and Zoo 题目大意:小孩子去參观动物园,动物园分非常多个区,每一个区有若干种动物,拥有的动物种数作为该区的权值.然后有m条路,每条路 ...

  3. 【BZOJ1854】游戏[SCOI2009](神奇贪心+并查集)

    这道题和今年GDKOI的Day2T2很像(然而gdkoi的题用网络流可以A,这道题只能拿30). 网址:http://www.lydsy.com/JudgeOnline/problem.php?id= ...

  4. 洛谷 P1525 关押罪犯 NOIp2010提高组 (贪心+并查集)

    题目链接:https://www.luogu.org/problemnew/show/P1525 题目分析 通过分析,我们可以知道,这道题的抽象意义就是把一个带边权的无向图,分成两个点集,使得两个集合 ...

  5. Supermarket(贪心/并查集)

    题目链接 原创的博客 题意: 超市里有N个商品. 第i个商品必须在保质期(第di天)之前卖掉, 若卖掉可让超市获得pi的利润. 每天只能卖一个商品. 现在你要让超市获得最大的利润. n , p[i], ...

  6. AcWing:145. 超市(贪心 + 小根堆 or 贪心 + 并查集)

    超市里有N件商品,每个商品都有利润pipi和过期时间didi,每天只能卖一件商品,过期商品(即当天di<=0di<=0)不能再卖. 求合理安排每天卖的商品的情况下,可以得到的最大收益是多少 ...

  7. poj1456(贪心+并查集)

    题目链接: http://poj.org/problem?id=1456 题意: 有n个商品, 已知每个商品的价格和销售截止日期, 每销售一件商品需要花费一天, 即一天只能销售一件商品, 问最多能买多 ...

  8. POJ 1456 Supermarket(贪心+并查集优化)

    一开始思路弄错了,刚开始想的时候误把所有截止时间为2的不一定一定要在2的时候买,而是可以在1的时候买. 举个例子: 50 2  10 1   20 2   10 1    50+20 50 2  40 ...

  9. Codeforces Round #346 (Div. 2) F. Polycarp and Hay 并查集

    题目链接: 题目 F. Polycarp and Hay time limit per test: 4 seconds memory limit per test: 512 megabytes inp ...

随机推荐

  1. Linux标准输入、输出和错误和文件重定向 专题

    当我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件.由于文件描述符不容易记忆,shell同时也给出了相应的文件名. 下面就是这些文件描述符及它们通常所 ...

  2. Idea解决打开大文件消耗CPU问题

    dea打开大文件的时候,会导致cpu利用率变得特别高,我这边八核i7的配置下,cpu依然飙到了600%~700%,这个时候就需要修改idea的配置(下面以Ubuntu为例). 1.进入到idea安装目 ...

  3. python2 高级编程

    第一 正则表达式 1. 正则表达式意义 正则表达式是高级文本匹配模式,为搜索,匹配,替换提供了基础 2. 搜索与匹配的区别 搜索指在字符串任何部分查找 匹配指在字符串起始处查找 3. 编写正则表达式 ...

  4. 使用Java HttpComponent/HttpClinet 调用 WebAPI问题的解决

    几个关键字: WebAPI, Android, Apache HttpComponent/HttpClient 问题:无论怎么测试, WebAPI的FormBody value总是空. 最简单的代码 ...

  5. 软件破解入门(暴力破解CrackMe)

    ---恢复内容开始--- 所谓暴力破解,就是通过修改汇编代码进而控制程序的运行流程,达到不需注册码也能正常使用软件的目的.相对于解出算法进而编写注册机,暴破的技术含量是比较低的.但也正是因为一本05年 ...

  6. Bootstrap滚动监控器

    前面的话 滚动监听插件是用来根据滚动条所处的位置来自动更新导航项的.滚动导航条下面的区域并关注导航项的变化,下拉菜单中的条目也会自动高亮显示.本文将详细介绍Bootstrap滚动监控器 基本用法 滚动 ...

  7. caffe实现多任务学习

    Github: https://github.com/Haiyang21/Caffe_MultiLabel_Classification Blogs  1. 采用多label的lmdb+Slice L ...

  8. docker --Dockerfile--一些语法

    环境更换 环境变量(与声明的ENV声明),也可以在特定指令作为变量用来被解释 Dockerfile.转义也被处理,从字面上包含类似于变量的语法. 环境变量Dockerfile用 $variable_n ...

  9. 面试 -- fragment生命周期

    Android 3.0 (Api 11)引入: Fragment具有重用,易适配(平板和手机之间的)优点: 依赖Activity,生命周期受到Activity的生命周期影响: fragment生命周期 ...

  10. SqlServer存储过程详解

    SqlServer存储过程详解 1.创建存储过程的基本语法模板: if (exists (select * from sys.objects where name = 'pro_name')) dro ...