zoukankan      html  css  js  c++  java
  • BZOJ3189 : [Coci2011]Slika

    通过离线将操作建树,即可得到最终存在的操作。

    然后逆着操作的顺序,倒着进行染色,对于每行维护一个并查集即可。

    时间复杂度$O(n(n+m))$。

    #include<cstdio>
    const int N=1010,M=100010;
    int n,m,i,j,x,C,X1,Y1,X2,Y2,f[M],cnt,pos[M],e[M][5],col[N][N];char ch;
    struct DSU{
      int f[N];
      void init(){for(int i=0;i<=n+1;i++)f[i]=i;}
      int F(int x){return f[x]==x?x:f[x]=F(f[x]);}
    }g[N];
    inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
    int main(){
      read(n),read(m),read(m);
      for(i=1;i<=m;i++){
        while((ch=getchar())!='P'&&ch!='S'&&ch!='L');
        if(ch=='P'){
          f[i]=x;x=i;
          for(j=0;j<5;j++)read(e[i][j]);
        }
        if(ch=='S')pos[++cnt]=x;
        if(ch=='L')read(x),x=pos[x];
      }
      for(i=0;i<n;i++)for(j=0;j<n;j++)col[i][j]=1;
      for(i=0;i<n;i++)g[i].init();
      while(x){
        C=e[x][0],X1=e[x][1],Y1=e[x][2],X2=e[x][3],Y2=e[x][4];
        for(i=X1;i<=X2;i+=2)for(j=g[i].F(Y1);j<=Y2;j=g[i].F(j+2))g[i].f[j]=j+2,col[i][j]=C;
        for(i=X1+1;i<=X2;i+=2)for(j=g[i].F(Y1+1);j<=Y2;j=g[i].F(j+2))g[i].f[j]=j+2,col[i][j]=C;
        x=f[x];
      }
      for(i=0;i<n;puts(""),i++)for(j=0;j<n;j++)printf("%d ",col[i][j]);
      return 0;
    }
    

      

  • 相关阅读:
    Idea中SpringBoot热部署搭建
    Redis 集群搭建
    centos7 vsftp搭建
    Centos 7 安装jdk
    Centos7 安装nginx
    Xshell 连接Linux
    python 的mysql 操作
    NIO/BIO
    java基础-3
    java基础-2
  • 原文地址:https://www.cnblogs.com/clrs97/p/5665509.html
Copyright © 2011-2022 走看看