zoukankan      html  css  js  c++  java
  • 【BZOJ】2054: 疯狂的馒头

    【题意】给定n个元素,m次给一段区间染色为i,求最终颜色。

    【算法】并查集

    【题解】因为一个点只受最后一次染色影响,所以倒过来每次将染色区间用并查集合并,父亲指向最右边的点。

    细节:

    1.fa[n+1]=n+1!!!界外点要赋值为自身!!!

    2.swap(l,r),涉及双端点的题都要注意。

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int maxn=1000010;
    int n,m,p,q,fa[maxn],col[maxn];
    int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
    int main(){
        scanf("%d%d%d%d",&n,&m,&p,&q);
        for(int i=1;i<=n+1;i++)fa[i]=i;// 
        int num=0;
        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)){
                col[j]=i;fa[j]=j+1;num++;
            }
            if(num==n)break;
        }
        for(int i=1;i<=n;i++)printf("%d
    ",col[i]);
        return 0;
    }
    View Code
  • 相关阅读:
    学习进度笔记
    学习进度笔记
    学习进度笔记
    《一级架构师》阅读笔记
    学习进度笔记
    学习进度笔记
    学习进度笔记
    mysql
    error: 'wblog/' does not have a commit checked out
    有用的网页
  • 原文地址:https://www.cnblogs.com/onioncyc/p/7647829.html
Copyright © 2011-2022 走看看