洛谷P2391 白雪皑皑(并查集)

题目背景

“柴门闻犬吠,风雪夜归人”,冬天,不期而至。千里冰封,万里雪飘。空中刮起了鸭毛大雪。雪花纷纷,降落人间。 美能量星球(pty 在 spore 上的一个殖民地)上的人们被这美景所震撼。但是 pty 却不高兴,他不喜欢白色的世界,他觉得这样太单调了。所以他想对雪花进行染色,让世界变得多彩些。

题目描述

现在有 N 片雪花排成一列。 Pty 要对雪花进行 M 次染色操作,第 i次染色操作中,把第(i*p+q)%N+1 片雪花和第(i*q+p)%N+1 片雪花之间的雪花(包括端点)染成颜色 i。其中 p,q 是给定的两个正整数。他想知道最后 N 片雪花被染成了什么颜色。

输入输出格式

输入格式:

包含 4 行:

N M p q 意义如题中所述。

输出格式:

包含 N 行:

第 i 行表示第 i 片雪花被染成的颜色 c

输入输出样例

输入样例#1: 复制

4
3
2
4

输出样例#1: 复制

2
2
3
0

说明

20%的数据满足:1<=n,m<=1000

40%的数据满足:1<=n<=8000,1<=m<=1000000

80%的数据满足:1<=n<=500000,1<=m<=10000000

100%的数据满足:1<=n<=1000000,1<=m<=10000000

保证 1<=M*p+q,M*q+p<=2*10^9

并查集维护染色问题经典题目

倒序处理

// luogu-judger-enable-o2
// luogu-judger-enable-o2
#include<bits/stdc++.h>
//#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<20,stdin),p1==p2)?EOF:*p1++)
using namespace std;
const int MAXN=1e6+10;
const int INF=1e9+10;
//char buf[1<<20],*p1=buf,*p2=buf;
inline int read()
{
    char c=getchar();int x=0,f=1;
    while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    return x*f;
}
int color[MAXN];
int fa[MAXN];
int find(int x)
{
    if(fa[x]==x) return fa[x];
    else return fa[x]=find(fa[x]);
}
int main()
{
    #ifdef WIN32
    freopen("a.in","r",stdin);
    #else
    #endif
    int N=read(),M=read(),p=read(),q=read();
    for(int i=1;i<=N+1;i++) fa[i]=i;
    for(int i=M;i>=1;i--)
    {
        int l=(i*p+q)%N+1,r=(i*q+p)%N+1;
        if(l>r) swap(l,r);
        for(int j=find(l);j<=r;j=find(j+1))
            color[j]=i,fa[j]=j+1;
    }
    for(int i=1;i<=N;i++)
        printf("%d\n",color[i]);
    return 0;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏猿人谷

为什么使用抽象类?有什么好处?

最简单的说法也是最重要的理由:接口和实现分离 老是在想为什么要引用抽象类,一般类不就够用了吗。一般类里定义的方法,子类也可以覆盖,没必要定义成抽象的啊。 看了下...

1969
来自专栏爱撒谎的男孩

设计模式之工厂模式

1683
来自专栏Coding迪斯尼

面试算法:二分查找法寻找数组截断点

1062
来自专栏专知

关关的刷题日记73 – Leetcode 21. Merge Two Sorted Lists

关关的刷题日记73 – Leetcode 21. Merge Two Sorted Lists 题目 Merge two sorted linked lists...

3407
来自专栏带你撸出一手好代码

lambda表达式杂谈

上面的数据存放着一组人员姓名、年龄、性别相关的信息。 现在有一个需求, 获得年龄20岁以上,性别为女的人的姓名。 看到需求后, 很多人脑袋中产生的解决方案可能是...

3374
来自专栏微信公众号:Java团长

Java回调机制(CallBack)详解

Java回调机制(CallBack),初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义。当然...

1362
来自专栏专知

​关关的刷题日记99 – Leetcode 56. Merge Intervals

关关的刷题日记99 – Leetcode 56. Merge Intervals 题目 Given a collection of intervals, mer...

3475
来自专栏Python爱好者

Python高效编程(二)

1504
来自专栏腾讯IVWEB团队的专栏

Promise 实践

promise已经是成为我们解决回调炼狱的常用方案,而且已经得到官方标准支持,如果你刚刚开始使用Promise,本文将帮助你了解几个常见的几个Promise的使...

3240
来自专栏Jed的技术阶梯

Java设计模式之工厂方法模式

女娲补天的故事大家都听说过吧,今天不说这个,说女娲创造人的故事,可不是“造人”的工作,这个词被现代人滥用了。这个故事是说,女娲在补了天后,下到凡间一看,哇塞,风...

2942

扫码关注云+社区

领取腾讯云代金券