bzoj2054疯狂的馒头(巧用非递归并查集)
www.cnblogs.com/shaokele/
bzoj2054:疯狂的馒头
Time Limit: 10 Sec
Memory Limit: 162 MBDescription
Input
第一行四个正整数N,M,p,q
Output
一共输出N行,第i行表示第i个馒头的最终颜色(如果最终颜色是白色就输出0)。
Sample Input
4 3 2 4
Sample Output
2
2
3
0
HINT
题目地址: bzoj2054:疯狂的馒头
题目大意: 题目很简洁了:)
题解:
并查集巧用
因为颜色是覆盖上去的
所以我们只要考虑最后一次染了什么颜色就可以了
倒着做上来
对于一个染色的区间 \(l,r\) ,我们只要将 \(l\) 指向 \(r+1\) 就好了,类似链表的操作
用并查集维护操作
本地测要加栈 或者 用非递归并查集
不然无限RE
数据下载[data](https://files.cnblogs.com/files/shaokele/2054.zip)
AC代码
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=1e6+5;
int n,m,p,q,l,r,sum;
int fa[N],ans[N];
int find(int x){int p=x;while(p!=fa[p])p=fa[p];while(x!=p){int tmp=fa[x];fa[x]=p;x=tmp;}return x;
}
int main(){scanf("%d%d%d%d",&n,&m,&p,&q);for(int i=1;i<=n+1;i++)fa[i]=i;for(int i=m;i>=1;i--){l=(1ll*i*p+q)%n+1;r=(1ll*i*q+p)%n+1;if(l>r)swap(l,r);for(int k=find(l);k<=r;k=find(k)){ans[k]=i;fa[k]=k+1;sum++;if(sum==n)break;}if(sum==n)break;}for(int i=1;i<=n;i++)printf("%d\n",ans[i]);return 0;
}
转载于:https://www.cnblogs.com/shaokele/p/9114804.html
bzoj2054疯狂的馒头(巧用非递归并查集)相关推荐
- [L氏并查集] Python 列表法实现非递归并查集,轻松权重优化。
一般的并查集都是用递归或者新建一个类来实现,这里介绍一种用Python来实现的非递归非函数并查集,这个方法暂时未在其他地方见过,尤其是中文领域目前还未见过,很可能是搜索引擎无法搜索到正确内容的原因,所 ...
- BZOJ2054疯狂的馒头
2054: 疯狂的馒头 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 634 Solved: 250 Description Input 第一行四个正 ...
- BZOJ2054 疯狂的馒头 并查集
2054: 疯狂的馒头 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 974 Solved: 423 [Submit][Status][Discuss ...
- bzoj2054 疯狂的馒头
bzoj上现在找不到这题,所以目前只是过了样例,没有测 2054: 疯狂的馒头 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 715 Solved ...
- BZOJ2054: 疯狂的馒头(并查集)
题意 题目链接 Sol 直接倒着并查集一波就行了 #include<bits/stdc++.h> // #define int long long using namespace std; ...
- acwing 3115 bzoj2054 疯狂的馒头
https://www.acwing.com/problem/content/3118/ 做法:并查集 逆序枚举,因为最后染色的就是最后的颜色. find(f[i])表示为右边第一个没有被染色的点,通 ...
- 【数据结构与算法】非森林版并查集V2.1的Java实现
非森林版查集 并查集V1.1不使用联合启发式或路径压缩算法,新版本采用同样的基本思路,但使用了按等级和路径压缩的并集. 核心功能 void union(root1, root2) → Merge tw ...
- 疯狂的馒头(bzoj2054)
问题 G: 疯狂的馒头(bzoj2054) 时间限制: 1 Sec 内存限制: 128 MB 提交: 93 解决: 26 [提交][状态] 题目描述 输入 第一行四个正整数N,M,p,q 输出 一共输 ...
- 【BZOJ2054】疯狂的馒头
Description Input 第一行四个正整数N,M,p,q Output 一共输出N行,第i行表示第i个馒头的最终颜色(如果最终颜色是白色就输出0). Sample Input 4 3 2 4 ...
最新文章
- 第 21 章 System Utilities 配置工具
- Gtk-WARNING**:无法在模块路径中找到主题引擎:“pixmap”的解决
- 信用经济中的经济因素
- 《Photoshop Lab修色圣典(修订版)》—第1课1.6节小河川流而过
- python采集修改原创_python应用系列教程——python中ftp操作:连接、登录、获取目录,重定向、上传下载,删除更改...
- ImportError: /home/kzl/anaconda2/bin/../lib/libstdc++.so.6: version `GLIBCXX_3.4.21' not found
- Drools 6.5 :入门程序
- es6二进制数组--基础
- C语言入栈算法,栈的入栈、出栈、获取栈顶的c语言算法
- strace ltrace使用
- 功能安全-26262-理论到实践-基础知识-基于可靠性理论的的SIL与基于系统理论的STAMP
- NI-9253 C系列电流输入模块-9253
- 「手绘控笔技巧」最有效的控笔练习,让你少走很多弯路
- python 元类理解
- ubuntu 网卡流量_Ubuntu下使用nload查看网卡实时流量
- Linux 下du命令详解及代码实现
- 机器学习中火爆的对抗学习是什么,有哪些应用?
- NAMD靶向分子动力学模拟Target molecular dynamic stimulation(附conf文件)
- 马尔科夫随机场Markov Random Field
- 各个 .NET 平台的 UI 框架比较