GYM 101173 F.Free Figurines(贪心||并查集)
题意:
俄罗斯套娃,给出一个初始状态和终止状态,问至少需要多少步操作才能实现状态转化
贪心做法
如果完全拆掉再重装,答案是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(贪心||并查集)的更多相关文章
- POJ 1456 Supermarket(贪心+并查集)
题目链接:http://poj.org/problem?id=1456 题目大意:有n件商品,每件商品都有它的价值和截止售卖日期(超过这个日期就不能再卖了).卖一件商品消耗一个单位时间,售卖顺序是可以 ...
- Codeforces 437D The Child and Zoo(贪心+并查集)
题目链接:Codeforces 437D The Child and Zoo 题目大意:小孩子去參观动物园,动物园分非常多个区,每一个区有若干种动物,拥有的动物种数作为该区的权值.然后有m条路,每条路 ...
- 【BZOJ1854】游戏[SCOI2009](神奇贪心+并查集)
这道题和今年GDKOI的Day2T2很像(然而gdkoi的题用网络流可以A,这道题只能拿30). 网址:http://www.lydsy.com/JudgeOnline/problem.php?id= ...
- 洛谷 P1525 关押罪犯 NOIp2010提高组 (贪心+并查集)
题目链接:https://www.luogu.org/problemnew/show/P1525 题目分析 通过分析,我们可以知道,这道题的抽象意义就是把一个带边权的无向图,分成两个点集,使得两个集合 ...
- Supermarket(贪心/并查集)
题目链接 原创的博客 题意: 超市里有N个商品. 第i个商品必须在保质期(第di天)之前卖掉, 若卖掉可让超市获得pi的利润. 每天只能卖一个商品. 现在你要让超市获得最大的利润. n , p[i], ...
- AcWing:145. 超市(贪心 + 小根堆 or 贪心 + 并查集)
超市里有N件商品,每个商品都有利润pipi和过期时间didi,每天只能卖一件商品,过期商品(即当天di<=0di<=0)不能再卖. 求合理安排每天卖的商品的情况下,可以得到的最大收益是多少 ...
- poj1456(贪心+并查集)
题目链接: http://poj.org/problem?id=1456 题意: 有n个商品, 已知每个商品的价格和销售截止日期, 每销售一件商品需要花费一天, 即一天只能销售一件商品, 问最多能买多 ...
- POJ 1456 Supermarket(贪心+并查集优化)
一开始思路弄错了,刚开始想的时候误把所有截止时间为2的不一定一定要在2的时候买,而是可以在1的时候买. 举个例子: 50 2 10 1 20 2 10 1 50+20 50 2 40 ...
- 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 ...
随机推荐
- DOM的基本操作
什么是DOM 1:文档对象模型(DocumentObjectModel,DOM) 2:DOM定义了访问和操作HTML文档的标准方法. 3:DOM将HTML 文档表达为树结构. 其他查询元素的方法: d ...
- [转帖] select、poll、epoll之间的区别总结[整理] + 知乎大神解答 https://blog.csdn.net/qq546770908/article/details/53082870 不过图都裂了.
select.poll.epoll之间的区别总结[整理] + 知乎大神解答 2016年11月08日 15:37:15 阅读数:2569 http://www.cnblogs.com/Anker/p/3 ...
- hive存储、数据模型、内部表
创建内部表 加一列元素 删除表
- 关于python项目路径导入自己写的库出错的一点思考
其实也是在写自己项目的时候遇到的,以前也遇到了但是一直采取的是回避的策略,这次总算弄清楚所以总结一下. 这个项目的顶级目录是medivac,他本身是一个python模块. 熟悉flask的人都知道,在 ...
- 关于python 自带csv库的使用心得 附带操作实例以及excel下乱码的解决
因为上次帮我们产品处理过一个文件,他想生成能excel处理操作的.但是上次由于时间非常紧张,所以并没有处理好. 正好无聊就来好好研究一下 ,找算法要了几个 csv文件.来好好玩一玩. 全篇使用了pyt ...
- Python调用C++类
http://blog.csdn.net/liyuan_669/article/details/25361655 C++导出类到Python http://blog.csdn.net/arnozhan ...
- codeforces431B
Shower Line CodeForces - 431B Many students live in a dormitory. A dormitory is a whole new world of ...
- Maven概述(一)
Maven是什么? Apache Maven is a software project management and comprehension tool. Based on the concept ...
- docker--compose--sonarqube
Create this docker-compose.yml file: version: "2" services: sonarqube: image: sonarqube po ...
- day10 前向引用
风湿理论,函数即变量.没定义没加载(开辟内存空间).都是没法用的 不定义调用必然出错 def foo(): print("from foo") bar () # 标红 foo() ...