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. WampServer 的phpmyadmin数据

    WampServer首次安装的时候phpmyadmin的密码是为空 设置密码 1.安装成功后,通过 phpmyadmin 进入mysql,点击上面的 [用户] 菜单,在用户[root]主机[local ...

  2. 全屏滚动效果H5FullscreenPage.js

    前提: 介于现在很多活动都使用了 类似全屏滚动效果 尤其在微信里面 我自己开发了一个快速构建 此类项目的控件 与市面上大部分控件不同的是此控件还支持元素的动画效果 并提供多种元素效果 基于zepto. ...

  3. wind的R接口、况客RSDK学习,双冒号以及quantmod主题

    本文主要参考:来自segmentfault上的FinanceR的专栏 https://segmentfault.com/a/1190000004580610 并自己对生疏不解之处做了补充和注释. 当然 ...

  4. [codevs1105][COJ0183][NOIP2005]过河

    [codevs1105][COJ0183][NOIP2005]过河 试题描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青 ...

  5. C#高级编程笔记 2016年10月8日运算符和类型强制转换

    1.checked和unchecked 运算符 C#提供了checked 和uncheckde 运算符.如果把一个代码块标记为checked, CLR就会执行溢出检查,如果发生溢出,就抛出overfl ...

  6. WindowsForm菜单工具栏--2016年12月6日

    ContextMenuStrip 添加控件后可在其他空间属性中进行绑定 MenuStrip       设置热键:在编辑的时候输入(&F)       设置快捷键:选中菜单项--右键属性--S ...

  7. ACM-ICPC如何起步

    刚刚绝定投身ACM-ICPC的同学先要过两关. 第一关:程序设计语言 如果学校有开设相关课程,则省去了很多麻烦.如果没有则可以选择<程序设计导引及在线实践>作为教材.现在的比赛中允许使用的 ...

  8. Spark集群部署

    Spark是通用的基于内存计算的大数据框架,可以和hadoop生态系统很好的兼容,以下来部署Spark集群 集群环境:3节点 Master:bigdata1 Slaves:bigdata2,bigda ...

  9. PHP 基础(赋值及函数)

    开端<?php>结尾</php> 弱类型语言  定义变量的时候 不需要 声明   但是 每一个变量前   都必须  加$ 符号 储存文件按  统一放到 安装文件夹下面的  WA ...

  10. C#设计模式之抽象工厂

    抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类. 抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品 当一个工厂等级结构可以创建出分属于不同产品等级结构的 ...