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个非负整数 ...
随机推荐
- iptables中DNAT和SNAT转发的配置方法
1.一对一流量完全DNAT 首先说一下网络环境,普通主机一台做防火墙用,网卡两块 eth0 192.168.0.1 内网 eth1 202.202.202.1 外网 内网中一台主机 192.168. ...
- confluence部署
confluence -- 团队文档的管理平台. 首先要在confluence官网买key. 部署 安装jdk 1.8 环境 查看机器是否自带 java -version,没有再安装. yum ins ...
- PX4学习之-uORB msg 自动生成模板解读
最后更新日期 2019-06-22 一.前言 在 PX4学习之-uORB简单体验 中指出, 使用 uORB 进行通信的第一步是新建 msg.在实际编译过程中,新建的 msg 会转换成对应的 .h..c ...
- 应对高并发场景的redis加锁技巧
// 获取锁getLock() { // 是否有正在执行的线程 boolean hasLock = false; try { hasLock = redisClient ...
- 20道HTML基础面试题(附答案)
以下是我整理的一些HTML的基础面试体,并自己整理了答案. 1 DOCTYPE有什么作用?标准模式与混杂模式如何区分?它们有何意义? 告诉浏览器使用哪个版本的HTML规范来渲染文档.DOCTYPE不存 ...
- 191107Django的Cookie和Session
Cookie的使用 from django.shortcuts import render,redirect def login(request): print("1",reque ...
- 威胁猎杀实战(三):基于Wazuh, Snort/Suricata和Elastic Stack的SOC
https://www.secpulse.com/archives/81629.html
- 【剑指offer37】二叉树的序列化
序列化过程很简单,如果是采用先序序列,那么对先序遍历做出改变即可: 层序遍历建立二叉树,如: 1 2 3 4 # 5 6 输入第一行:将要输入的节点的个数N,如上面的为7 ...
- java的replace和replaceAll
都是全部替换,只不过后者参数为正则 replaceFirst()是替换第一个
- python + 爬虫 + fiddler + 夜神模拟器 爬取app(1)
抓包 抓包是爬虫里面经常用到的一个词,完整的应该叫做抓取数据请求响应包 ,而Fiddler这款工具就是干这个的 普通https抓包设置 打开Fiddler ------> Options .然后 ...