bzoj 1453 双面棋盘
题目大意:
一个黑白方格图
支持单点修改 查询黑色与白色联通快个数
思路:
可以把每一行压为一个点
使用线段树来维护
然后两行合并的时候使用并查集来合并
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#define ll long long
#define inf 2139062143
#define MAXN 220
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) x=x*+ch-'',ch=getchar();
return x*f;
}
int n,g[MAXN][MAXN],f[MAXN<<],t[MAXN<<];
int find(int x) {return f[x]==x?x:f[x]=find(f[x]);}
struct data {int ans[],m[MAXN<<];}tr[MAXN<<];
void solve(int k,int p)
{
tr[k].ans[g[p][]]=,tr[k].ans[g[p][]^]=,tr[k].m[]=tr[k].m[+n]=;
for(int i=,j=;i<=n;i++)
{
if(g[p][i]!=g[p][j]) tr[k].ans[g[p][i]]++,j=i;
tr[k].m[i]=tr[k].m[i+n]=j;
}
}
void upd(int k,int p)
{
tr[k].ans[]=tr[k<<].ans[]+tr[k<<|].ans[];
tr[k].ans[]=tr[k<<].ans[]+tr[k<<|].ans[];
//cout<<k<<" "<<p<<endl;
for(int i=;i<=n*;i++) f[i]=tr[k<<].m[i];
//for(int i=1;i<=n*2;i++) cout<<i<<" "<<f[i]<<" "<<tr[k<<1].m[i]<<endl;
for(int i=;i<=n*;i++) f[i+n*]=tr[k<<|].m[i]+n*;
//cout<<f[1]<<" "<<f[2]<<endl;
for(int i=;i<=n;i++) if(g[p][i]==g[p+][i]&&find(i+n)!=find(i+n*))tr[k].ans[g[p][i]]--,f[f[i+n]]=f[i+n*];
for(int i=;i<=n*;i++)
{
f[i]=find(i);
if(i>n*) t[f[i]]=i-n*;
}
for(int i=;i<=n;i++) tr[k].m[i]=i;
for(int i=;i<=n;i++) tr[k].m[i+n]=t[f[i+n*]];
}
void build(int k,int l,int r)
{
if(l==r) {solve(k,l);return;}
int mid=(l+r)>>;
build(k<<,l,mid),build(k<<|,mid+,r);
upd(k,mid);
}
void mdf(int k,int l,int r,int x)
{
if(l==r) {solve(k,l);return;}
int mid=(l+r)>>;
if(x<=mid) mdf(k<<,l,mid,x);
else mdf(k<<|,mid+,r,x);
upd(k,mid);
}
int main()
{
n=read();int a,b;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++) g[i][j]=read();
build(,,n);
int T=read();
while(T--) a=read(),b=read(),g[a][b]^=,mdf(,,n,a),printf("%d %d\n",tr[].ans[],tr[].ans[]);
}
bzoj 1453 双面棋盘的更多相关文章
- bzoj 1453: [Wc]Dface双面棋盘
1453: [Wc]Dface双面棋盘 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 617 Solved: 317[Submit][Status][ ...
- 【BZOJ1453】[Wc]Dface双面棋盘 线段树+并查集
[BZOJ1453][Wc]Dface双面棋盘 Description Input Output Sample Input Sample Output HINT 题解:话说看到题的第一反应其实是LCT ...
- P4121 [WC2005]双面棋盘
题目 P4121 [WC2005]双面棋盘 貌似是刘汝佳出的题目?? 做法 线段树维护并查集 线段树分治\(1\)~\(n\)行,我们要考虑维护的肯定是黑.白各自的联通块数量 考虑区间合并,其实就与中 ...
- 【刷题】BZOJ 1453 [Wc]Dface双面棋盘
Description Input Output Sample Input Sample Output HINT Solution 不强制在线的动态图问题,那就LCT了 类似二分图那道题目 对于四个方 ...
- bzoj 2706: [SDOI2012]棋盘覆盖 Dancing Link
2706: [SDOI2012]棋盘覆盖 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 255 Solved: 77[Submit][Status] ...
- BZOJ 4000: [TJOI2015]棋盘( 状压dp + 矩阵快速幂 )
状压dp, 然后转移都是一样的, 矩阵乘法+快速幂就行啦. O(logN*2^(3m)) ------------------------------------------------------- ...
- bzoj 1057: [ZJOI2007]棋盘制作 单调栈
题目链接 1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 2027 Solved: 1019[Submit] ...
- BZOJ 1057: [ZJOI2007]棋盘制作( dp + 悬线法 )
对于第一问, 简单的dp. f(i, j)表示以(i, j)为左上角的最大正方形, f(i, j) = min( f(i + 1, j), f(i, j + 1), f(i + 1, j + 1)) ...
- 悬线法 || BZOJ 1057: [ZJOI2007]棋盘制作 || Luogu P1169 [ZJOI2007]棋盘制作
题面:P1169 [ZJOI2007]棋盘制作 题解: 基本是悬线法板子,只是建图判断时有一点点不同. 代码: #include<cstdio> #include<cstring&g ...
随机推荐
- 【转载】Spring注解@Resource和@Autowired区别对比
@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Sprin ...
- jekyll本地环境搭建(Windows)
序:最近一直在搞Github建站,所以一直没机会写文章,那边的环境虽然搞好了,但是网站的界面却是个问题,不想用别人的,总想自己设计个,却感觉没经验吧,就一直耽搁了.所以也就没心情在那边写文章,很久没写 ...
- 简单的jsonp实现跨域原理
什么原因使jsonp诞生? 传说,浏览器有一个很重要的安全限制,叫做"同源策略".同源是指,域名,协议,端口相同.举个例子,用一个浏览器分别打开了百度和谷歌页面,百度页面在执行脚 ...
- linux下C/C++程序的内存布局
内核空间和用户空间: 我们在编写程序时使用的内存空间叫虚拟内存,程序在运行时,要完成虚拟内存到物理内存的转换.假如在32位环境上,理论上我们可以使用的虚拟内存空间是4GB,但实际上这4GB并不能完全给 ...
- css--小白入门篇5
一.行高和字号 1.1 行高 CSS中,所有的行,都有行高.盒模型的padding,绝对不是直接作用在文字上的,而是作用在“行”上的. 1 line-height: 40px; 文字,是在自己的行里面 ...
- static private 与 final 的用法总结
1.static表示静态.他是属于类的.可以在本身类里直接调用,或在其它类里用类名.方法名调用.不加static表示是实例的方法,必须用实例来调用.在本类里也一样,必须用实例调用 2.private是 ...
- 团队一致性的PHP开发环境之Vagrant
Vagrant 简介 Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境. 它的主要意义是让所有开发人员都使用和线上服务器一样的环境,本质上和你新建一个虚拟机 安装 # https: ...
- uva 1444 Knowledge for the masses
uva 1444 Description You are in a library equipped with bookracks that move on rails. There are ma ...
- IDEA建立一个可运行的struts2项目
参考博客:https://blog.csdn.net/shuai_wy/article/details/79027573 直接使用IDEA创建struts2项目,配置好tomcat后是跑不起来的 需要 ...
- centos7 安装mongodb3.4 及用户管理
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/1.semanage command not found yum ...