Description

Input

Output

Sample Input

Sample Output

HINT

线段树套并查集应该是比较好写的做法,时间复杂度为O(N^3+M*NlogN)。
#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双面棋盘的更多相关文章

  1. 【BZOJ1453】[Wc]Dface双面棋盘 线段树+并查集

    [BZOJ1453][Wc]Dface双面棋盘 Description Input Output Sample Input Sample Output HINT 题解:话说看到题的第一反应其实是LCT ...

  2. bzoj 1453: [Wc]Dface双面棋盘

    1453: [Wc]Dface双面棋盘 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 617  Solved: 317[Submit][Status][ ...

  3. 【BZOJ1453】[WC] Dface双面棋盘(LCT维护联通块个数)

    点此看题面 大致题意: 给你一个\(n*n\)的黑白棋盘,每次将一个格子翻转,分别求黑色连通块和白色连通块的个数. \(LCT\)动态维护图连通性 关于这一部分内容,可以参考这道例题:[BZOJ402 ...

  4. BZOJ1453:[WC]Dface双面棋盘

    浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:https://lydsy.com/JudgeOnline/problem. ...

  5. [Wc]Dface双面棋盘()

    题解: 一道维护奇怪信息的线段树... 我刚开始看了标签想的是删去图上一个点后求连通性 发现不会 于是退化成一般图支持删除 插入 维护连通性 发现有2两种做法 1.lct维护 按照结束顺序先后排序,给 ...

  6. 【刷题】BZOJ 1453 [Wc]Dface双面棋盘

    Description Input Output Sample Input Sample Output HINT Solution 不强制在线的动态图问题,那就LCT了 类似二分图那道题目 对于四个方 ...

  7. BZOJ1453: [WC2005]Dface双面棋盘

    离线LCT维护MST,和3082的方法一样.然而比较码农,适合颓废的时候写. PS:线段树分治要好写得多,LCT比较自娱自乐. #include<bits/stdc++.h> using ...

  8. [BZOJ1453]Dface双面棋盘

    Description Input Output Sample Input Sample Output HINT 线段树+并查集,暴力记录和更新一些信息,详情见代码注解. #include<cm ...

  9. P4121 [WC2005]双面棋盘

    题目 P4121 [WC2005]双面棋盘 貌似是刘汝佳出的题目?? 做法 线段树维护并查集 线段树分治\(1\)~\(n\)行,我们要考虑维护的肯定是黑.白各自的联通块数量 考虑区间合并,其实就与中 ...

随机推荐

  1. tamtam-nuget-imageserver

    https://bitbucket.org/tamtam-nl/tamtam-nuget-imageserver/src/eaddb1ac943fcaa9e7ef210ed5a5ccf630b8699 ...

  2. PHP常用数据库代码汇总

    连接MYSQL //MYSQL数据库配置 define(DB_HOST, '127.0.0.1'); define(DB_USER, 'user'); define(DB_PASS, 'pass'); ...

  3. 学习笔记——k近邻法

    对新的输入实例,在训练数据集中找到与该实例最邻近的\(k\)个实例,这\(k\)个实例的多数属于某个类,就把该输入实例分给这个类. \(k\) 近邻法(\(k\)-nearest neighbor, ...

  4. Excel—身份证生日提取

    一.只有18位的身份证号码 如: 身份证号 330682199302264000 41120019890823729X 231081199002256839 131101198203154666 36 ...

  5. cpu对各种运算的速度对比

    今天忽然想到cpu对各种基本运算的速度对比,我对比了异或,加法和乘法,结果发现速度时间,加法小于乘法小于异或, 原本我以为异或会是最快的,结果异或是最慢的,这跟cpu中的alu算术逻辑单元的实现有关, ...

  6. CSS3 之 flexbox 响应式的未来

    CSS3 之 flexbox 响应式的未来 flexbox 伸缩盒模型 . flex: CSS3中一个重要的而且非常有用的属性,用来制作弹性布局是非常的方便而又强大. . flex布局:旨在提供一个更 ...

  7. Go - 变量初始化 及 注意事项

    Go变量 初始化 对 复合类型(数组.切片.字典.结构体)变量的初始化是,有一些语法限制: 1.初始化表达式必须包含类型标签: 2.左花括号必须在类型尾部,不能另起一行: 3.多个成员初始值以逗号分隔 ...

  8. Android下如何计算两经纬点之间距离

    节选自百度地图API: 若开发者使用的是百度地图或定位API,且版本在1.3.5以后的, 路线规划提供了获取路线距离的方法,见MKRoutePlan 类的 getDistance 方法. 如果是计算任 ...

  9. 一条代码解决各种IE浏览器兼容性问题

    在网站开发中不免因为各种兼容问题苦恼,针对兼容问题,其实IE给出了解决方案Google也给出了解决方案百度也应用了这种方案去解决IE的兼容问题 百度源代码如下 <!Doctype html> ...

  10. bzoj3551 Peaks加强版

    这个题--感觉离线和在线的代码难度差不多(pb_ds不要说话). 离线的话,就是把所有询问按照w排个序,然后一边Kruskal+平衡树启发式合并一边回答询问就好了. 在线也不难写.首先Kruskal重 ...