BZOJ 3189. [Coci2011]Slika
有回档操作,考虑离线,这样就知道最终的操作序列了
发现前面的操作会被后面覆盖,干脆直接从后往前操作,如果一个位置以前染色过了那就不用再染色
所以我们可以用 $n$ 个链表维护 $n$ 个行,操作过的位置直接从链表中删除即可
然后复杂度就是 $O(nm)$,代码中是用 $n$ 个并查集来维护行,都差不多
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=,M=1e5+;
int n,m,d[M][],from[M],sav[M],tot;
int mp[N][N];
struct dsu {
int fa[N];
void init() { for(int i=;i<=n+;i++) fa[i]=i; }
inline int find(int x) { return x==fa[x] ? x : fa[x]=find(fa[x]); }
}g[N];
int main()
{
n=read(),m=read(),m=read();
for(int i=;i<n;i++) g[i].init();
int now=; char s[];
for(int i=;i<=m;i++)
{
scanf("%s",s+);
if(s[]=='P')
{
for(int j=;j<;j++) d[i][j]=read();
from[i]=now; now=i;
}
else if(s[]=='S') sav[++tot]=now;
else now=sav[read()];
}
for(int i=;i<n;i++)
for(int j=;j<n;j++) mp[i][j]=;
int xa,ya,xb,yb,c;
while(now)
{
c=d[now][],xa=d[now][],ya=d[now][],xb=d[now][],yb=d[now][];
for(int i=xa;i<=xb;i+=)
for(int j=g[i].find(ya);j<=yb;j=g[i].find(j+))
g[i].fa[j]=g[i].find(j+),mp[i][j]=c;
for(int i=xa+;i<=xb;i+=)
for(int j=g[i].find(ya+);j<=yb;j=g[i].find(j+))
g[i].fa[j]=g[i].find(j+),mp[i][j]=c;
now=from[now];
}
for(int i=;i<n;i++,puts(""))
for(int j=;j<n;j++) printf("%d ",mp[i][j]);
return ;
}
BZOJ 3189. [Coci2011]Slika的更多相关文章
- BZOJ3189 : [Coci2011]Slika
通过离线将操作建树,即可得到最终存在的操作. 然后逆着操作的顺序,倒着进行染色,对于每行维护一个并查集即可. 时间复杂度$O(n(n+m))$. #include<cstdio> cons ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 【BZOJ入门3189】 猜数字(数学,搜索)
Description 味味最近在玩猜数字的游戏,现在她也希望你来玩一下这个游戏.猜数字游戏的规则是这样的,告诉你一个正整数 n(2<=n<=11),然后味味心中会想一个 n 个数字组成的 ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
- BZOJ 3275: Number
3275: Number Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 874 Solved: 371[Submit][Status][Discus ...
- BZOJ 2879: [Noi2012]美食节
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1834 Solved: 969[Submit][Status] ...
- bzoj 4610 Ceiling Functi
bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...
- BZOJ 题目整理
bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...
- 【sdoi2013】森林 BZOJ 3123
Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负整数 ...
随机推荐
- Spark译文(一)
Spark Overview(Spark概述) ·Apache Spark是一种快速通用的集群计算系统. ·它提供Java,Scala,Python和R中的高级API,以及支持通用执行图的优化引擎. ...
- MiracleSnow网页设计HTML5+CSS3+JS全套视频教程
终于把这套课程讲完了,虽然时间隔了很长,但也算有始有终了,这是在YY讲课中我自己录的,讲了网页设计的基础,这也是我第一次给那么多人讲课,讲的不好多多包涵. 前几次视频和课件是分开的,后几次都打包在一起 ...
- 揭秘Android Studio项目目录结构
I don't know if this is because of the Gradle Build System (I'd wager it is), but I'll tell you what ...
- windows管理员权限激活
第一步:计算机-右键--管理--选择用户,选择administrator用户--取消勾选:账户禁用 第二步:alt+ctrl+delete,快捷键调出资源管理器--点击切换用户 第三步:显示出现adm ...
- 循环链表C语言实现
按照单链表的设计,稍加改动.和单向链表不一样的地方,头节点不指向NULL,而是指向自己head 循环链表的判满 1)判断next是不是头结点,2)判断size /* * CycleLinkList.h ...
- 作业要求20191010-9 alpha week 1/2 Scrum立会报告+燃尽图 07
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8752 一.小组情况组长:贺敬文组员:彭思雨 王志文 位军营 杨萍队名:胜 ...
- Ruby的异常处理
Ruby在处理0.1+0.2是会出现精度问题: 许多语言都有类似问题,详见网址:http://0.30000000000000004.com/ Ruby的异常处理 如果异常处理范围是整个方法体,可以省 ...
- leetcode 371两整数之和
class Solution { public: int getSum(int a, int b) { long long carry=b; ){ carry=a&b; a=a^b; b=(c ...
- rocketMQ retry 消息的实现
consumer 消费失败,会把消息重新发往 %RETRY% + consumerGroup,这个 retry 消息会在一定时间后,真实送到 retry topic. broker 处理发送到 ret ...
- jquery.validate.js使用之自定义表单验证规则
jquery.validate.js使用之自定义表单验证规则,下面列出了一些常用的验证法规则 jquery.validate.js演示查看 jquery validate强大的jquery表单验证插件 ...