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;
}
BZOJ3189 : [Coci2011]Slika的更多相关文章
- BZOJ 3189. [Coci2011]Slika
传送门 有回档操作,考虑离线,这样就知道最终的操作序列了 发现前面的操作会被后面覆盖,干脆直接从后往前操作,如果一个位置以前染色过了那就不用再染色 所以我们可以用 $n$ 个链表维护 $n$ 个行,操 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 【题解】Ples [COCI2011]
[题解]Ples [COCI2011] 依旧是没有传送门,只有提供了数据的官网. [题目描述] \(N\) 个汉子和 \(N\) 个妹纸一起参加舞会,跳舞时只能是一个汉子一个妹纸配对,现在给出每个人的 ...
- 【题解】Dvoniz [COCI2011]
[题解]Dvoniz [COCI2011] 没有传送门,只有提供了数据的官网. [题目描述] 对于一个长度为 \(2*K\) 的序列,如果它的前 \(K\) 个元素之和小于等于 \(S\) 且后 \( ...
- coci2011 debt 还债
coci2011 debt 还债 Description 有N个人,每个人恰好欠另一个人Bi元钱,现在大家都没有钱,政府想要给其中一些人欠,使得大家都不欠别人钱. 如A欠B 50,B欠C 20,则当政 ...
- COCI2011:友好数对
校内OJ传送门 一般容斥,具体思想参考代码实现,刚开始是在读入时处理所有数的二进制子集,没看$N$的范围以为复杂度不会爆炸.. 然后复杂度就爆炸了. 小优化: 每次整个载入二进制,计数.这个结束后枚举 ...
- JZYZOJ1376 [coci2011]友好数对 容斥定理 状态压缩
http://172.20.6.3/Problem_Show.asp?id=1376 题意:找给出的数中含有相同数字的数对的对数. mmp数论题竟然卡快读,莫名拉低通过率什么的太过分了. 刚开始想到了 ...
- [coci2011]友好数对 容斥
无趣的小x在玩一个很无趣的数字游戏.他要在n个数字中找他喜欢友好数对.他对友好数对的定义是:如果有两个数中包含某一个以上相同的数位(单个数字),这两个数就是友好数对.比如:123和345 就是友好数对 ...
随机推荐
- Angular.JS
AngularJS是什么? 完全使用 JavaScript编写的客户端技术.同其他历史悠久的 Web技术( HTML. CSS 和JavaScript)配合使用,使Web应用开发比以往更简单.更快捷. ...
- javaWeb---文件上传(commons-FileUpload组件)
FileUpload是Apache组织(www.apache.org)提供的免费的上传组件,但是FileUpload组件本身还依赖于commons组件,所以从Apache下载此组件的时候还需要连同co ...
- python中获取当前日期在当月是第几天
- AJAX 三级联动
新的封装类 <?php class DBDA { public $host="localhost";//服务器地址 public $uid="root"; ...
- Android Programming: Pushing the Limits -- Chapter 6: Services and Background Tasks
什么时候使用Service 服务类型 开启服务 后台运行 服务通信 附加资源 什么时候使用Service: @.任何与用户界面无关的操作,可移到后台线程,然后由一个Service来控制这个线程. 服务 ...
- yum -y list java* 查看当前java的版本
[root@NB ok]# yum -y list java* Loaded plugins: fastestmirror, refresh-packagekit, security Loading ...
- 【javascript】 for循环小技巧
最近在读[Jquery技术内幕],里面介绍了一种js for循环的实用写法. 一般写for循环是这么写的: var elemts = [1,2,3,4,5]; for(var i=0; i<el ...
- C# 非UI线程对控件的控制
第一步:定义委托 public delegate void wei(string ss); 第二步:控制UI的方法 public void get1(string ss) { richTextBox1 ...
- JavaScript获取当前根目录
JavaScript获取当前根目录 主要用到Location 对象,包含有关当前 URL 的信息,是 Window 对象的一个部分,可通过 window.location 属性来访问. 方法一 (wi ...
- 跟着鸟哥学Linux系列笔记1
跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 装完linux之后,接下来一步就是进行相关命令的学习了 第五章:首次登录与在线求助man page 1. X ...