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 疯狂的馒头 并查集相关推荐

  1. BZOJ2054: 疯狂的馒头(并查集)

    题意 题目链接 Sol 直接倒着并查集一波就行了 #include<bits/stdc++.h> // #define int long long using namespace std; ...

  2. Bzoj P2054 疯狂的馒头 | 并查集

    题目链接 思路:因为每次染色都会将某些馒头的颜色彻底更改,所以每个馒头的最终的颜色其实是由最后一次染色决定的,那么我们只考虑最后一次染色即可.对此,我们可以从后往前倒着染色,当目前的染色区间中存在白色 ...

  3. bzoj2054疯狂的馒头(巧用非递归并查集)

    www.cnblogs.com/shaokele/ bzoj2054:疯狂的馒头 Time Limit: 10 Sec Memory Limit: 162 MB Description Input 第 ...

  4. bzoj2054 疯狂的馒头

    bzoj上现在找不到这题,所以目前只是过了样例,没有测 2054: 疯狂的馒头 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 715  Solved ...

  5. BZOJ2054疯狂的馒头

    2054: 疯狂的馒头 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 634 Solved: 250 Description Input 第一行四个正 ...

  6. acwing 3115 bzoj2054 疯狂的馒头

    https://www.acwing.com/problem/content/3118/ 做法:并查集 逆序枚举,因为最后染色的就是最后的颜色. find(f[i])表示为右边第一个没有被染色的点,通 ...

  7. 【BZOJ2054】疯狂的馒头(并查集)

    /* 经典思路, 倒序并查集处理即可*/#include<cstdio> #include<algorithm> #include<cstring> #includ ...

  8. bzoj 2054: 疯狂的馒头(线段树||并查集)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2054 线段树写法: 点的颜色只取决于最后一次染的颜色,所以我们可以倒着维护,如果当前区间之前 ...

  9. 疯狂的馒头(bzoj2054)

    问题 G: 疯狂的馒头(bzoj2054) 时间限制: 1 Sec 内存限制: 128 MB 提交: 93 解决: 26 [提交][状态] 题目描述 输入 第一行四个正整数N,M,p,q 输出 一共输 ...

最新文章

  1. WebKit.NET-0.5简单应用
  2. 吴恩达发起新型竞赛范式!模型固定,只调数据?!
  3. Boost学习之正则表达式--regex
  4. c语言求满足不等式的最小值,高手请进,请教一道简单的c语言题!
  5. lambda函数if_Python中lambda的使用,与它的三个好基友介绍
  6. 第一次面试且失败的经历
  7. 专题八:MATLAB图形用户界面设计
  8. c语言erf函数,c/c++开发分享精确计算缩放互补误差函数,erfcx()
  9. canon iPF 系列保养墨盒清零方法
  10. button和submit的区别
  11. 尚医通项目101-123:前台用户系统、登录注册、邮箱登录
  12. 橘子学ES03之Docker安装ELK+cerebro
  13. 详解jsPlumb这个javascript的可拖动连线库
  14. ts报错:Object is possibly ‘undefined‘.Vetur(2532)
  15. 「算法与数据结构」从入门到进阶吐血整理推荐书单
  16. php外边框样式,CSS边框样式
  17. 实锤!阿里集团将剥离阿里云 100% 股权
  18. TestStand-用户界面
  19. Maple设置显示精度
  20. Ubuntu 代理上网设置

热门文章

  1. vivado仿真注意事项总结
  2. 【学习总结】关于vue中table表头加粗与遮挡问题
  3. MySQL查询之 联合主键
  4. 服务器连接不上的排查思路
  5. usb接口驱动_USB转串口芯片——FT232R
  6. 如何构建一个高效的企业舆情监测系统?
  7. 大一学生HTML5期末大作业——基于HTML+CSS制作传统节日美食13页(美食网站设计与实现)
  8. 初中计算机怎么打根号,电脑怎么打根号符号(EXCEL符号输入的小技巧)
  9. Python函数的概念以及定义方式
  10. 云盘哪个好?请问国内哪个云盘比较好?