4月的时候在luogu上做过 白雪皑皑 这道题,当时一遍AC可高兴了qwq,后来去了个厕所,路上忽然发现自己的做法是错的qwq。。。然后就咕咕了qwq

今天看到了 疯狂的馒头 ,发现一毛一样OvO。。。还是好好做一下吧QWQ

先上个错误代码(虽然BZOJ和Luogu都A了)

  1. // luogu-judger-enable-o2
  2. #include<cstdio>
  3. #include<iostream>
  4. #define R register int
  5. #define getchar() *S++
  6. using namespace std;
  7. char RR[],*S=RR;
  8. inline int g() {
  9. R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
  10. do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
  11. }
  12. int n,m,p,q;
  13. int vl[],pre[],nxt[];
  14. signed main() {
  15. fread(RR,sizeof(RR),,stdin);
  16. n=g(),m=g(),p=g(),q=g();
  17. for(R i=;i<=n;++i) pre[i]=i-,nxt[i]=i+;
  18. for(R i=m;i>=;--i) {R l=(i*p+q)%n+,r=(i*q+p)%n+; if(l>r) swap(l,r);
  19. if(!vl[l]) for(R j=l;j<=r;j=nxt[j]) vl[j]=i,nxt[pre[j]]=nxt[j],pre[nxt[j]]=pre[j];
  20. if(!vl[r]) for(R j=r;j>=l;j=pre[j]) vl[j]=i,nxt[pre[j]]=nxt[j],pre[nxt[j]]=pre[j];
  21. } for(R i=;i<=n;++i) printf("%d\n",vl[i]);
  22. }

首先倒序处理显然吧。。。已经染过色的就不用再染了。。

但是这样判断显然是不对的:只判了左右端点不能确定中间有没有染色。。。问题是不能动态更新fa

刚刚本来想hack一下自己,结果发现不会造数据。。。。莫非这数据是有规律的导致我AC了???不知。。。懒得对拍了。。。如果大佬有想法可以评论,救救这只不知所对(不知所错)的蒟蒻、、qwq

好,扯完皮说正解:

用并查集当做链表(???)。。。还是倒序处理,如果这个区间已经染了,那么向右合并。注意每次读取fa时是要用getf来路径压缩,而不能直接取fa,否则不能更新

  1. #include<cstdio>
  2. #include<iostream>
  3. #define R register int
  4. using namespace std;
  5. const int N=1E+,M=1E+;
  6. inline int g() {
  7. R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
  8. do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
  9. }
  10. int n,m,p,q,cnt;
  11. int fa[N],a[N];
  12. inline int getf(int x) {return x==fa[x]?x:fa[x]=getf(fa[x]);}
  13. signed main() {
  14. n=g(),m=g(),p=g(),q=g();
  15. for(R i=;i<=n+;++i) fa[i]=i;
  16. for(R i=m;i;--i) { R l=(i*p+q)%n+,r=(i*q+p)%n+;
  17. if(l>r) swap(l,r);
  18. for(R j=getf(l);j<=r;j=getf(j)) {a[j]=i,fa[j]=j+,++cnt; if(cnt==n) break;}
  19. if(cnt==n) break;
  20. } for(R i=;i<=n;++i) printf("%d\n",a[i]);
  21. }

AC!=correct 2019.05.06

Luogu P2391 白雪皑皑 && BZOJ 2054: 疯狂的馒头 并查集的更多相关文章

  1. BZOJ.2054.疯狂的馒头(并查集)

    BZOJ 倒序处理,就是并查集傻题了.. 并查集就是确定下一个未染色位置的,直接跳到那个位置染.然而我越想越麻烦=-= 以为有线性的做法,发现还是要并查集.. 数据随机线段树也能过去. //18400 ...

  2. 【BZOJ 2054】 2054: 疯狂的馒头 (并查集特技)

    Input 第一行四个正整数N,M,p,q Output 一共输出N行,第i行表示第i个馒头的最终颜色(如果最终颜色是白色就输出0). Sample Input 4 3 2 4 Sample Outp ...

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

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

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

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

  5. BZOJ2054 疯狂的馒头 并查集

    题意:懒得写了有空再补上 链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2054 离线从后往前做,并查集维护下一个没染色的就可以啦- #incl ...

  6. BZOJ 2054 疯狂的馒头

    并查集把染过色的并在一起.倒着染色. #include<iostream> #include<cstdio> #include<cstring> #include& ...

  7. [luogu P2391] 白雪皑皑

    [luogu P2391] 白雪皑皑 题目背景 “柴门闻犬吠,风雪夜归人”,冬天,不期而至.千里冰封,万里雪飘.空中刮起了鸭毛大雪.雪花纷纷,降落人间. 美能量星球(pty 在 spore 上的一个殖 ...

  8. BZOJ 4195: [Noi2015]程序自动分析 并查集+离散化

    LUOGU 1955BZOJ 4195 题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量 ...

  9. bzoj 2936 [Poi 1999] 降水 - 并查集

    题目传送门 需要root权限的传送门 题目大意 有一个$n\times m$的网格图,每一格都有一个高度.一次降雨过后问最多能积多少水. 考虑算每一高度能储存的水的量. 如果小于等于这个高度的格子和边 ...

随机推荐

  1. ONTAK2010 Peaks加强版

    给一个图,每个点有点权,$q$ 次询问从 $x$ 开始只走点权小于等于 $y$ 的路径能到的点中第 $k$ 大的点权,无解输出 -1 强制在线 请注意因为这个 sb 博主为了描述方便,这里的题目描述用 ...

  2. bzoj 2732: [HNOI2012]射箭 半平面交

    题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=2732 题解: 这道题的做法我不想说什么了... 其他题解都有说做法... 即使是我上午做 ...

  3. CSS3 日常小结

    1. pointer-events:none; 2. flex 今天看到一个牛X的CSS3属性 flex, 称为弹性盒子.  这中属性完全可以替代媒体查询啦 使用方法: 父元素使用属性display ...

  4. 对spring、AOP、IOP的理解 (转)

    spring 的优点?1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦2.可以使用容易提供的众多服务,如事务管理,消息服务等3.容器提供单例模式支持4.容器提供了AOP技术,利用它很容易实现如权 ...

  5. js---数组习题---

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. PowerDesigner生成CDM模型

    一.新建概念数据模型  1)选择File-->New,弹出如图所示对话框,选择CDM模型(即概念数据模型)建立模型. 2)完成概念数据模型的创建.以下图示,对当前的工作空间进行简单介绍.(以后再 ...

  7. HttpApplication 对象的创建过程及HttpModule过滤器的内部实现过程

    最近通过Reflector学习了一下asp.net内部的原理,做做笔记,方便以后查阅. 先看下HttpApplication 对象的创建过程 从IHttpHandler applicationInst ...

  8. Java探索之旅(14)——文本I/O与读写

    1文件类File    ❶封装文件或路径的属性.不包括创建和读写文件操作.File实例并不会实际创建文件.不论文件存在与否,可以创建任意文件名的实例.两种实例创建方式如下:               ...

  9. Learning Python 004 基础的数据类型和变量

    Python 基础的数据类型和变量 数据类型 整数 Python可以处理任意大小的整数,当然包括负整数. Python表示十六进制也用0x前缀. 浮点数 1.23x10^9和12.3x10^8是完全相 ...

  10. vue.js基础学习(1)

    一:v-cloak:解决浏览器闪烁,编译过程中不会显示,直到编译结束才显示. 用法:[v-cloak] { display: none;} <div v-cloak> {{ message ...