这是一道好题,按行建线段树,每个点维护上下边界的连通性,详细见代码注释

网上写法不一,自认为比较简单,就放出来相出来献丑吧

 var u,d:array[..,..] of longint;  //u[]上边界,d[]下边界
s,fa,q:array[..] of longint;
c:array[..,..] of longint; //维护对应颜色块数
a:array[..,..] of longint;
j,i,n,m,x,y:longint; function getf(x:longint):longint;
begin
if fa[x]<>x then fa[x]:=getf(fa[x]);
exit(fa[x]);
end; procedure union(i,m:longint);
var j,k1,k2,t:longint;
begin
c[i,]:=c[i*,]+c[i*+,];
c[i,]:=c[i*,]+c[i*+,];
for j:= to n do
begin
fa[j]:=u[i*,j];
fa[j+n]:=d[i*,j];
fa[j+*n]:=u[i*+,j]+*n; //防止编号重复
fa[j+*n]:=d[i*+,j]+*n;
end;
for j:= to n do
if a[m+,j]=a[m,j] then //子区间相邻连通块合并
begin
k1:=getf(fa[j+n]);
k2:=getf(fa[j+*n]);
if k1<>k2 then
begin
fa[k2]:=k1;
dec(c[i,a[m,j]]);
end;
end;
t:=;
for j:= to n do
begin
k1:=getf(fa[j]); //对整个区间上边界连通性重新标号
if s[k1]= then
begin
inc(t);
q[t]:=k1;
s[k1]:=j;
end;
u[i,j]:=s[k1];
k2:=getf(fa[j+*n]); //对整个区间下边界连通性重新标号
if s[k2]= then
begin
inc(t);
q[t]:=k2;
s[k2]:=j+n; //防止编号重复,上边界编号1~n,下边界编号n+~2n
end;
d[i,j]:=s[k2];
end;
for j:= to t do
s[q[j]]:=;
end; procedure leaf(i,row:longint);
var j,t:longint;
begin
t:=;
c[i,]:=; c[i,]:=;
for j:= to n do
if (j<>) and (a[row,j]=a[row,j-]) then
begin
u[i,j]:=u[i,j-];
d[i,j]:=d[i,j-];
end
else begin
inc(c[i,a[row,j]]);
u[i,j]:=j; d[i,j]:=j; //连通块以起始位置为编号,这样比较方便
end;
end; procedure build(i,l,r:longint);
var m:longint;
begin
if l=r then leaf(i,l)
else begin
m:=(l+r) shr ;
build(i*,l,m);
build(i*+,m+,r);
union(i,m);
end;
end; procedure work(i,l,r:longint);
var m:longint;
begin
if l=r then leaf(i,l)
else begin
m:=(l+r) shr ;
if x<=m then work(i*,l,m)
else work(i*+,m+,r);
union(i,m);
end;
end; begin
readln(n);
for i:= to n do
for j:= to n do
read(a[i,j]);
build(,,n);
readln(m);
for i:= to m do
begin
readln(x,y);
a[x,y]:=-a[x,y];
work(,,n);
writeln(c[,],' ',c[,]);
end;
end.

bzoj1453的更多相关文章

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

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

  2. BZOJ1453: [Wc]Dface双面棋盘

    Description Input Output Sample Input Sample Output HINT 线段树套并查集应该是比较好写的做法,时间复杂度为O(N^3+M*NlogN). #in ...

  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. BZOJ1453: [WC2005]Dface双面棋盘

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

  6. [BZOJ1453]Dface双面棋盘

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

  7. 【待填坑】bzoj上WC的题解

    之前在bzoj上做了几道WC的题目,现在整理一下 bzoj2115 去膜拜莫队的<高斯消元解xor方程组> bzoj2597 LCT维护MST bzoj1758 分数规划+树分治+单调队列 ...

随机推荐

  1. 使用自定义任务审批字段创建 SharePoint 顺序工作流

    http://msdn.microsoft.com/zh-cn/library/hh824675(v=office.14).aspx#odc_sp14_ta_CreatingSPSeqWorkflow ...

  2. python 开发webService

    最近在学习用python 开发webservice,费了半天时间把环境搭好,记录下具体过程,以备后用. 首先系统上要有python.其次要用python进行webservice开发,还需要一些库: 1 ...

  3. 2733: [HNOI2012]永无乡 - BZOJ

    Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...

  4. js页面刷新一次

    // var str = document.location.hash, // index = str.indexOf("#"); // if(index == 0){ // wi ...

  5. PAT-乙级-1043. 输出PATest(20)

    1043. 输出PATest(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一个长度不超过10000 ...

  6. ASP + ACCESS保存图片文件之实现

    con.execute "CREATE tblImg (lngId COUNTER PRIMARY KEY, binImg IMAGE)" set ads=createobject ...

  7. WPF MultiDataTrigger

    huhu <Style x:Key="Cell" TargetType="{x:Type Button}"> <Setter Property ...

  8. cf 320B

    数据量小  dfs水过 #include <iostream> #include <cstdio> #include <cstring> using namespa ...

  9. Debugging with GDB 用GDB调试多线程程序

    Debugging with GDB http://www.delorie.com/gnu/docs/gdb/gdb_25.html GDB调试多线程程序总结 一直对GDB多线程调试接触不多,最近因为 ...

  10. HDU 2992 Hotel booking(BFS+DFS 或者 SPFA+Floyd)

    点我看题目 题意 : 一个司机要从1点到达n点,1点到n点中有一些点有宾馆,司机的最长开车时间不能超过10小时,所以要在10小时之内找到宾馆休息,但是为了尽快的走到n点,问最少可以经过几个宾馆. 思路 ...