BZOJ2054 疯狂的馒头 并查集
2054: 疯狂的馒头
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 974 Solved: 423
[Submit][Status][Discuss]
Description
Input
第一行四个正整数N,M,p,q
Output
一共输出N行,第i行表示第i个馒头的最终颜色(如果最终颜色是白色就输出0)。
Sample Input
4 3 2 4
Sample Output
2
2
3
0
HINT
分析:
也是并查集的一个典型应用啊23333特别巧。
考虑每个馒头只有最后一次染色有效,所以可以倒着染色,对于已经染过色的馒头就跳过。
关于“跳过”这一步,我们可以用跳表(应该是叫这个),也可以用并查集。每次对这个馒头进行染色之后,就把它的父亲变为后面一个,(如果后一个已经染过色,那么它的父亲也会改变),这样最后找到的祖先即是一个没有染过色的馒头。
这样就可以直接找到下一个没有染过色的馒头,进行染色。
总的时间复杂度为O(n+m)
注意附初始值的时候要到n+1,因为n会和n+1合并。(这个贡献了2发RE)
/**************************************************************Problem: 2054User: LaLaLa112138Language: C++Result: AcceptedTime:2568 msMemory:110112 kb
****************************************************************///BZOJ 2054
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;const int N = 10000010;int n,m,p,q;
int col[N];
int fa[N];int getfather(int x){if(fa[x]==x) return x;else return fa[x]=getfather(fa[x]);
}int main(){scanf("%d%d%d%d",&n,&m,&p,&q);for(register int i=1;i<=n+1;i++) fa[i]=i;for(register int i=m;i>=1;i--){int u=(i*p+q)%n+1,v=(i*q+p)%n+1;if(u>v) swap(u,v);for(int j=getfather(u);j<=v;j=getfather(j)){col[j]=i;fa[j]=j+1;}}for(register int i=1;i<=n;i++) printf("%d\n",col[i]);return 0;
}
BZOJ2054 疯狂的馒头 并查集相关推荐
- BZOJ2054: 疯狂的馒头(并查集)
题意 题目链接 Sol 直接倒着并查集一波就行了 #include<bits/stdc++.h> // #define int long long using namespace std; ...
- Bzoj P2054 疯狂的馒头 | 并查集
题目链接 思路:因为每次染色都会将某些馒头的颜色彻底更改,所以每个馒头的最终的颜色其实是由最后一次染色决定的,那么我们只考虑最后一次染色即可.对此,我们可以从后往前倒着染色,当目前的染色区间中存在白色 ...
- bzoj2054疯狂的馒头(巧用非递归并查集)
www.cnblogs.com/shaokele/ bzoj2054:疯狂的馒头 Time Limit: 10 Sec Memory Limit: 162 MB Description Input 第 ...
- bzoj2054 疯狂的馒头
bzoj上现在找不到这题,所以目前只是过了样例,没有测 2054: 疯狂的馒头 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 715 Solved ...
- BZOJ2054疯狂的馒头
2054: 疯狂的馒头 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 634 Solved: 250 Description Input 第一行四个正 ...
- acwing 3115 bzoj2054 疯狂的馒头
https://www.acwing.com/problem/content/3118/ 做法:并查集 逆序枚举,因为最后染色的就是最后的颜色. find(f[i])表示为右边第一个没有被染色的点,通 ...
- 【BZOJ2054】疯狂的馒头(并查集)
/* 经典思路, 倒序并查集处理即可*/#include<cstdio> #include<algorithm> #include<cstring> #includ ...
- bzoj 2054: 疯狂的馒头(线段树||并查集)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2054 线段树写法: 点的颜色只取决于最后一次染的颜色,所以我们可以倒着维护,如果当前区间之前 ...
- 疯狂的馒头(bzoj2054)
问题 G: 疯狂的馒头(bzoj2054) 时间限制: 1 Sec 内存限制: 128 MB 提交: 93 解决: 26 [提交][状态] 题目描述 输入 第一行四个正整数N,M,p,q 输出 一共输 ...
最新文章
- WebKit.NET-0.5简单应用
- 吴恩达发起新型竞赛范式!模型固定,只调数据?!
- Boost学习之正则表达式--regex
- c语言求满足不等式的最小值,高手请进,请教一道简单的c语言题!
- lambda函数if_Python中lambda的使用,与它的三个好基友介绍
- 第一次面试且失败的经历
- 专题八:MATLAB图形用户界面设计
- c语言erf函数,c/c++开发分享精确计算缩放互补误差函数,erfcx()
- canon iPF 系列保养墨盒清零方法
- button和submit的区别
- 尚医通项目101-123:前台用户系统、登录注册、邮箱登录
- 橘子学ES03之Docker安装ELK+cerebro
- 详解jsPlumb这个javascript的可拖动连线库
- ts报错:Object is possibly ‘undefined‘.Vetur(2532)
- 「算法与数据结构」从入门到进阶吐血整理推荐书单
- php外边框样式,CSS边框样式
- 实锤!阿里集团将剥离阿里云 100% 股权
- TestStand-用户界面
- Maple设置显示精度
- Ubuntu 代理上网设置