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个非负整数 ...
随机推荐
- 安装python及其它
https://www.liaoxuefeng.com/wiki/1016959663602400/1016959856222624
- war包部署到tomcat
1.maven web app打包成app.war.打包命令:mvn clean package Dmaven.test.skip=true war 是什么?里面有什么东西?a.web.app所有必 ...
- oracle条件参数中 IN函数中的值最大只能为1000个
delete from dep where id in(1,2,3.....) 括号里面字段个数最大只能为1000个
- Spring boot之JPA/Hibernate/Spring Data
1.什么是JPA? JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. JPA(Java Per ...
- MyBatis中的JdbcType映射介绍
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本 ...
- C++入门经典-例5.10-指针作为返回值
1:代码如下: // 5.10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> usin ...
- 第七周课程总结&实验报告五
实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. 实验要求 掌握使用抽象类的方法. 掌握使用系统接口的技术和创建自定义接口的方法. 了解 Java 系统包的结构. ...
- Python学习笔记:第一次接触
用的是windows的IDLE(python 3) 对象的认识:先创建一个list对象(用方括号) a = ['xieziyang','chenmanru'] a 对list中对象的引用 a[0] # ...
- shell脚本获取绝对路径
当前脚本全路径 echo $(readlink -f "$0") 获取绝对路径(不带文件名) echo $(dirname $(readlink -f "$0" ...
- Redis数据类型,面试相关
1.Redis最为常用的数据类型主要有以下几种 String Hash List (消息队列) Set (可以用于存储不重复的列表数据) Sorted Set (有序不重复数的列表数据) Pub/Su ...