BZOJ1453: [Wc]Dface双面棋盘
Description

Input

Output

Sample Input
Sample Output
HINT

#include<cstdio>
#include<cctype>
#include<queue>
#include<cstring>
#include<algorithm>
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define ren for(int i=first[x];i;i=next[i])
using namespace std;
inline int read() {
int x=0,f=1;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=getchar()) x=x*10+c-'0';
return x*f;
}
const int maxn=210;
int n,A[maxn][maxn];
struct Node {
int res[2],pa[maxn*2];
int findset(int x) {return pa[x]==x?x:findset(pa[x]);}
void init(int x) {
res[0]=res[1]=0;
rep(i,1,n) pa[i]=i;
rep(i,1,n) {
res[!A[x][i]]++;
if(i>1&&A[x][i-1]==A[x][i]) res[!A[x][i]]--,pa[findset(i-1)]=findset(i);
}
rep(i,1,n) pa[i+n]=pa[i];
}
}T[maxn<<2];
int pa[maxn*4],tmp[maxn*4];
int findset(int x) {return x==pa[x]?x:pa[x]=findset(pa[x]);}
void maintain(int o,int mid) {
int lc=o<<1,rc=lc|1;
T[o].res[0]=T[lc].res[0]+T[rc].res[0];
T[o].res[1]=T[lc].res[1]+T[rc].res[1];
rep(i,1,n*2) pa[i]=T[lc].pa[i];
rep(i,1,n*2) pa[i+2*n]=T[rc].pa[i]+2*n;
rep(i,1,n) if(A[mid][i]==A[mid+1][i]) {
int x=findset(i+n),y=findset(i+2*n);
if(x!=y) {
T[o].res[!A[mid][i]]--;
pa[x]=y;
}
}
rep(i,1,n*4) {
if(i<=n) tmp[findset(i)]=i;
if(i>3*n) tmp[findset(i)]=i-2*n;
}
rep(i,1,n) T[o].pa[i]=tmp[pa[i]];
rep(i,1,n) T[o].pa[i+n]=tmp[pa[i+3*n]];
}
void build(int o,int l,int r) {
if(l==r) T[o].init(l);
else {
int mid=l+r>>1,lc=o<<1,rc=lc|1;
build(lc,l,mid);build(rc,mid+1,r);
maintain(o,mid);
}
}
void update(int o,int l,int r,int p) {
if(l==r) T[o].init(l);
else {
int mid=l+r>>1,lc=o<<1,rc=lc|1;
if(p<=mid) update(lc,l,mid,p);
else update(rc,mid+1,r,p);
maintain(o,mid);
}
}
int main() {
n=read();
rep(i,1,n) rep(j,1,n) A[i][j]=read();
build(1,1,n);
dwn(i,read(),1) {
int x=read(),y=read();A[x][y]^=1;
update(1,1,n,x);
printf("%d %d\n",T[1].res[0],T[1].res[1]);
}
return 0;
}
BZOJ1453: [Wc]Dface双面棋盘的更多相关文章
- 【BZOJ1453】[Wc]Dface双面棋盘 线段树+并查集
[BZOJ1453][Wc]Dface双面棋盘 Description Input Output Sample Input Sample Output HINT 题解:话说看到题的第一反应其实是LCT ...
- bzoj 1453: [Wc]Dface双面棋盘
1453: [Wc]Dface双面棋盘 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 617 Solved: 317[Submit][Status][ ...
- 【BZOJ1453】[WC] Dface双面棋盘(LCT维护联通块个数)
点此看题面 大致题意: 给你一个\(n*n\)的黑白棋盘,每次将一个格子翻转,分别求黑色连通块和白色连通块的个数. \(LCT\)动态维护图连通性 关于这一部分内容,可以参考这道例题:[BZOJ402 ...
- BZOJ1453:[WC]Dface双面棋盘
浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:https://lydsy.com/JudgeOnline/problem. ...
- [Wc]Dface双面棋盘()
题解: 一道维护奇怪信息的线段树... 我刚开始看了标签想的是删去图上一个点后求连通性 发现不会 于是退化成一般图支持删除 插入 维护连通性 发现有2两种做法 1.lct维护 按照结束顺序先后排序,给 ...
- 【刷题】BZOJ 1453 [Wc]Dface双面棋盘
Description Input Output Sample Input Sample Output HINT Solution 不强制在线的动态图问题,那就LCT了 类似二分图那道题目 对于四个方 ...
- BZOJ1453: [WC2005]Dface双面棋盘
离线LCT维护MST,和3082的方法一样.然而比较码农,适合颓废的时候写. PS:线段树分治要好写得多,LCT比较自娱自乐. #include<bits/stdc++.h> using ...
- [BZOJ1453]Dface双面棋盘
Description Input Output Sample Input Sample Output HINT 线段树+并查集,暴力记录和更新一些信息,详情见代码注解. #include<cm ...
- P4121 [WC2005]双面棋盘
题目 P4121 [WC2005]双面棋盘 貌似是刘汝佳出的题目?? 做法 线段树维护并查集 线段树分治\(1\)~\(n\)行,我们要考虑维护的肯定是黑.白各自的联通块数量 考虑区间合并,其实就与中 ...
随机推荐
- commons-fileupload.jar实现文件上传
标签: uploadfileimportexceptionstringmyeclipse 2012-09-06 19:55 1497人阅读 评论(0) 收藏 举报 分类: 好东东(2) Jav ...
- 即时搜索或input实时检测监听输入框变化
js实现的文本框内容发生改变立马触发事件简单介绍:本章节介绍一下如何在文本框的内容发生变化的时候,立马触发一个事件执行响应的操作,而不是像是keydow或者keyup事件一样,只能够检测通过键盘输入导 ...
- javascript 高级程序设计 -有感
本来我想写一个高级程序设计总结的,结果发现我进入了一扇门,里面所有的字都要逐字逐句的理解,所有描述已经是非常精炼了,我最初的想法无异于老鼠吃大象. 我现在记录的是我在看这本时的感想. 2015.4月9 ...
- [Math & Algorithm] 拉格朗日乘数法
拉格朗日乘数法(Lagrange Multiplier Method)之前听数学老师授课的时候就是一知半解,现在越发感觉拉格朗日乘数法应用的广泛性,所以特意抽时间学习了麻省理工学院的在线数学课程.新学 ...
- [ios基础]IOS应用程序的生命周期问题
—程序的生命周期 a.程序的生命周期是指应用程序启动到应用程序结束整个阶段的全过程 b.每一个IOS应用程序都包含一个UIApplication对象,IOS系统通过该U ...
- 关于Javascript的使用参考
DOM编程>1.js重要的作用就是可以让用户可以与网页元素进行交互操作-->JS精华之所在 >2.DOM编程也是ajax的基础 >3.DOM(文档对象模型),是HTML与XML ...
- JavaScript深入浅出5-数组
慕课网教程视频地址:Javascript深入浅出 数组:值的有序集合 创建数组:字面量,构造器new array() 数组的读写:push() 尾部加入新元素 unshift() 头部加入新元素 po ...
- 孙鑫C++教程留下来的作业--如何让工具栏在原来隐藏的位置出现
--加油,不仅仅是口号! BEGIN---------------------------------- 将工具栏进行停靠.当隐藏后再次点击出现的时候它出现在工具栏顶部了,并没有停靠在原来的位置,如何 ...
- C#夯实基础系列之字符串
string作为我们在编程当中用的最多的数据类型,同时又由于它的特殊性,怎么强调它的重要性都不为过,理解string的一些类型和存储机制,有助于我们写出正确且高效的代码. 一.string类型 1.s ...
- JS 删除对象属性
updateNode: function(data) { if(data) { this.root[data.id] = data; } }, removeNodes: function(idsArr ...