2021.08.03 BZOJ 疯狂的馒头(并查集)

疯狂的馒头 - 题目 - 黑暗爆炸OJ (darkbzoj.tk)

重点:

1.并查集的神奇运用

2.离线化

题意:

给一个长为n的序列,进行m次操作,每次将一个区间修改为同一个数,之后要求输出每个位置的值。

分析:

用并查集把已经染过色的馒头跳过。

代码如下:

(来自他人)

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. #include <algorithm>
  5. #define M 1001001
  6. using namespace std;
  7. int n,m,p,q;
  8. int a[M];
  9. namespace Union_Find_Set{
  10. int fa[M];
  11. int Find(int x)
  12. {
  13. if(!fa[x]||fa[x]==x)
  14. return fa[x]=x;
  15. return fa[x]=Find(fa[x]);
  16. }
  17. }
  18. int main()
  19. {
  20. using namespace Union_Find_Set;
  21. int i,j;
  22. cin>>n>>m>>p>>q;
  23. for(i=m;i;i--)
  24. {
  25. int x=((long long)i*p+q)%n+1;
  26. int y=((long long)i*q+p)%n+1;
  27. if(x>y) swap(x,y);
  28. for(j=Find(x);j<=y;j=Find(j))
  29. a[j]=i,fa[j]=j+1;
  30. }
  31. for(i=1;i<=n;i++)
  32. printf("%d\n",a[i]);
  33. return 0;
  34. }

(我自己的MLE)

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<iostream>
  4. using namespace std;
  5. const int N=1e6+10;
  6. int n,m,p,q,col[N],fa[N];
  7. inline int read(){
  8. int s=0,w=1;
  9. char ch=getchar();
  10. while(ch<'0'||ch>'9'){
  11. if(ch=='-')w=-1;
  12. ch=getchar();
  13. }
  14. while(ch<='9'&&ch>='0'){
  15. s=s*10+ch-'0';
  16. ch=getchar();
  17. }
  18. return s*w;
  19. }
  20. int find(int x){
  21. return (fa[x]==0||fa[x]==x)?fa[x]=x:fa[x]=find(fa[x]);
  22. }
  23. int main(){
  24. //freopen("3.out","w",stdout);
  25. n=read();m=read();p=read();q=read();
  26. //for(int i=1;i<=n;i++)fa[i]=i;
  27. for(int i=m;i>=1;i--){
  28. //cout<<" case 1"<<endl;//
  29. //int l=(((i%n)*(p%n))%n+q)%n+1;
  30. //int r=(((i%n)*(q%n))%n+p)%n+1;
  31. long long l=((long long)i*p+q)%n+1,r=((long long)i*q+p)%n+1;
  32. //int l=(i*p+q)%n+1,r=(i*q+p)%n+1;
  33. //cout<<l<<" "<<r<<endl;//
  34. if(r<l)swap(l,r);
  35. for(int j=find(l);j<=r;j=find(j)){
  36. //cout<<" case 2 "<<j<<endl;
  37. col[j]=i;
  38. fa[j]=j+1;
  39. }
  40. //for(int k=1;k<=n;k++)cout<<fa[k]<<" ";cout<<endl;//
  41. }
  42. for(int i=1;i<=n;i++)cout<<col[i]<<endl;
  43. return 0;
  44. }

2021.08.03 BZOJ 疯狂的馒头(并查集)的更多相关文章

  1. Luogu P2391 白雪皑皑 && BZOJ 2054: 疯狂的馒头 并查集

    4月的时候在luogu上做过 白雪皑皑 这道题,当时一遍AC可高兴了qwq,后来去了个厕所,路上忽然发现自己的做法是错的qwq...然后就咕咕了qwq 今天看到了 疯狂的馒头 ,发现一毛一样OvO.. ...

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

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

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

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

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

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

  5. BZOJ2054 疯狂的馒头 并查集

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

  6. 2021.08.03 P1197 星球大战(并查集)

    2021.08.03 P1197 星球大战(并查集) [P1197 JSOI2008]星球大战 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.可以离线处理.把在线变为离 ...

  7. BZOJ 3674 可持久化并查集加强版(路径压缩版本)

    /* bzoj 3674: 可持久化并查集加强版 http://www.lydsy.com/JudgeOnline/problem.php?id=3674 用可持久化线段树维护可持久化数组从而实现可持 ...

  8. BZOJ 3674 可持久化并查集加强版(按秩合并版本)

    /* bzoj 3674: 可持久化并查集加强版 http://www.lydsy.com/JudgeOnline/problem.php?id=3674 用可持久化线段树维护可持久化数组从而实现可持 ...

  9. bzoj 3674: 可持久化并查集加强版 (启发式合并+主席树)

    Description Description:自从zkysb出了可持久化并查集后……hzwer:乱写能AC,暴力踩标程KuribohG:我不路径压缩就过了!ndsf:暴力就可以轻松虐!zky:…… ...

随机推荐

  1. pygame坦克大战前夕

    最近想自己写pygame版的坦克大战,今晚已经完成如下功能: 1,我方坦克,可手动移动:敌方坦克,自动转方向与移动 2,坦克颜色随机,坦克形态大小可调. 3,双方坦克速度可调. 4,刷新坦克的位置随机 ...

  2. 除了增删改查你对MySQL还了解多少?

    目录 除了增删改查你对MySQL还了解多少? MySQL授权远程连接 创建用户.授权 客户端与服务器连接的过程 TCP/IP 命名管道和共享内存 Unix域套接字文件 查询优化 MySQL中走与不走索 ...

  3. metinfo 6.0 任意文件读取漏洞

    一. 启动环境 1.双击运行桌面phpstudy.exe软件 2.点击启动按钮,启动服务器环境 二.代码审计 1.双击启动桌面Seay源代码审计系统软件 2.点击新建项目按钮,弹出对画框中选择(C:\ ...

  4. ElasticSearch7.3 学习之定制动态映射(dynamic mapping)

    1.dynamic mapping ElasticSearch中有一个非常重要的特性--动态映射,即索引文档前不需要创建索引.类型等信息,在索引的同时会自动完成索引.类型.映射的创建. 当ES在文档中 ...

  5. JavaScript 02 运算符,分支结构

    一元换算符 字符串类型 对于字符串,来说自增或自减会自动进行类型转换 1.var str = '10' 自动转换 从string转为number 2.str++ NaN 对于转化不成功的string类 ...

  6. Prometheusbu部署使用-1

    Prometheus+grafana部署使用 主机列表: 192.168.161.130 : Prometheus 192.168.161.128 : node-1 192.168.161.129 : ...

  7. 深度学习训练过程中的学习率衰减策略及pytorch实现

    学习率是深度学习中的一个重要超参数,选择合适的学习率能够帮助模型更好地收敛. 本文主要介绍深度学习训练过程中的6种学习率衰减策略以及相应的Pytorch实现. 1. StepLR 按固定的训练epoc ...

  8. String--Date互转

    相关类:DateFormat:抽象类DateFormat可以进行日期和字符串的格式化和解析,使用子类SimpleDateFormat实现. 1.Date --> String(格式化) publ ...

  9. mysql常见命令参数(一)

    1.mysql命令常用参数 1.--auto-rehash (tab键自动补全,表名及表字段) # mysql -u root --auto-rehash # vim my.cnf [mysql] a ...

  10. 在IE中设置在序列化没有版本号就提示