BZOJ 2054 并查集 解题报告
来源:互联网 发布:steelcase淘宝 编辑:程序博客网 时间:2024/04/29 07:50
2054: 疯狂的馒头
Description
Input
第一行四个正整数N,M,p,q
Output
一共输出N行,第i行表示第i个馒头的最终颜色(如果最终颜色是白色就输出0)。
Sample Input
4 3 2 4
Sample Output
2
2
3
0
HINT
【解题报告】
因为只询问最后的颜色,所以将操作倒着处理就可以了,不用管前面怎么染的。
用并查集维护每个馒头后面第一个白馒头(包括自己),然后每次染色暴力染区间内所有空馒头,同时把染了色的馒头的集合和后面一个的集合进行合并。
代码如下:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define N 1000005#define M 10000005int n,m,p,q,a[N],f[N];int find(int x){ return f[x]==x?x:f[x]=find(f[x]);}int main(){ scanf("%d%d%d%d",&n,&m,&p,&q); for(int i=1;i<=n+1;++i) f[i]=i; for(int i=m;i>=1;--i) { int x=(i*p+q)%n+1,y=(i*q+p)%n+1; if(x>y) swap(x,y); for(int j=find(x);j<=y;j=find(j)) a[j]=i,f[j]=j+1; } for(int i=1;i<=n;++i) printf("%d\n",a[i]); return 0;}
阅读全文
0 0
- BZOJ 2054 并查集 解题报告
- BZOJ 3319 并查集 解题报告
- BZOJ 1116 [POI 2008] 并查集 解题报告
- BZOJ 3211&3038 并查集+树状数组 解题报告
- BZOJ 1529 [POI 2005] 并查集 解题报告
- bzoj 1854 游戏 并查集+贪心 解题报告
- 并查集解题报告
- 食物链 并查集 解题报告
- HDU 1232 - 并查集 解题报告
- Friend解题报告 - 并查集练习
- 并查集专题训练解题报告
- POJ 1182 并查集 解题报告
- HDU1213并查集解题报告
- bzoj 2054 并查集
- poj 1417 True Liars 解题报告 并查集 DP
- 解题报告-HDOJ-1232(并查集)
- 畅通工程之并查集解题报告
- 【解题报告】 ZOJ 3641 Information Sharing - 并查集+模拟
- HTML笔记——从零开始
- redis各类型实现&命令
- 构造函数、析构函数与虚函数概念
- 【啊哈!算法】算法3:最常用的排序——快速排序
- C语言模拟实现C++中的继承和多态
- BZOJ 2054 并查集 解题报告
- 什么是跨域?怎么解决跨域问题?
- 【Hibernate】Hibernate真分页实现
- ubuntu 16.04 pycaffe安裝
- elasticsearch for java【教程一Client】
- python学习(2)——字符串,列表,元组,集合
- 项目方面的复习
- Hive(一)内建操作符与函数开发
- altium的基本知识