http://codeforces.com/gym/101550/attachments

【AC】

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e3+;
const int maxq=1e4+;
int n,m,q;
struct node
{
int x1,y1;
int x2,y2;
}nd[maxq];
int fir[maxn][maxn];
bool vis[maxn][maxn];
int fa[maxn*maxn];
int id(int x,int y)
{
return (x-)*m+y;
} void init()
{
for(int i=;i<=n*m;i++) fa[i]=i;
} int getfa(int x)
{
return x==fa[x]?x:fa[x]=getfa(fa[x]);
} void mix(int x,int y)
{
int fx=getfa(x);
int fy=getfa(y);
if(fx^fy)
{
fa[fx]=fy;
}
}
bool same(int x,int y)
{
return getfa(x)==getfa(y);
}
int dir[][]={{,},{-,},{,},{,-}};
bool inside(int x,int y)
{
return x>=&&x<=n&&y>=&&y<=m;
}
int ans[maxq];
int main()
{
while(~scanf("%d%d%d",&n,&m,&q))
{
memset(vis,false,sizeof(vis));
memset(fir,,sizeof(fir));
init();
for(int i=;i<=q;i++)
{
scanf("%d%d%d%d",&nd[i].x1,&nd[i].y1,&nd[i].x2,&nd[i].y2);
for(int j=nd[i].x1;j<=nd[i].x2;j++)
{
for(int k=nd[i].y1;k<=nd[i].y2;k++)
{
vis[j][k]=true;
if(!fir[j][k]) fir[j][k]=i;
}
}
}
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
if(!vis[i][j]&&inside(i+,j)&&!vis[i+][j]) mix(id(i,j),id(i+,j));
if(!vis[i][j]&&inside(i,j+)&&!vis[i][j+]) mix(id(i,j),id(i,j+));
}
}
int cnt=;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
if(!vis[i][j]&&getfa(id(i,j))==id(i,j)) cnt++;
}
}
for(int i=q;i>=;i--)
{
ans[i]=cnt;
for(int x=nd[i].x1;x<=nd[i].x2;x++)
{
for(int y=nd[i].y1;y<=nd[i].y2;y++)
{
if(fir[x][y]==i)
{
vis[x][y]=false;
cnt++;
for(int mv=;mv<;mv++)
{
int xx=x+dir[mv][];
int yy=y+dir[mv][];
if(!inside(xx,yy)) continue;
if(vis[xx][yy]) continue;
if(!same(id(x,y),id(xx,yy)))
{
cnt--;
mix(id(x,y),id(xx,yy));
} }
}
}
}
}
for(int i=;i<=q;i++)
{
printf("%d\n",ans[i]);
}
}
return ;
}

【倒跑并查集维护连通块】NCPC 2016 A. Artwork的更多相关文章

  1. P1197 [JSOI2008]星球大战(并查集判断连通块+正难则反)

    P1197 [JSOI2008]星球大战(并查集判断连通块+正难则反) 并查集本来就是连一对不同父亲的节点就的话连通块就少一个. 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统 ...

  2. C. Edgy Trees Codeforces Round #548 (Div. 2) 并查集求连通块

    C. Edgy Trees time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  3. BZOJ 1015: [JSOI2008]星球大战starwar(并查集求连通块+离线处理)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1015 题意: 思路:好题啊!!! 这道题目需要离线处理,先把所有要删的点给保存下来,然后逆序加点,这 ...

  4. [Codeforces 1027 F] Session in BSU [并查集维护二分图匹配问题]

    题面 传送门 思路 真是一道神奇的题目呢 题目本身可以转化为二分图匹配问题,要求右半部分选择的点的最大编号最小的一组完美匹配 注意到这里左边半部分有一个性质:每个点恰好连出两条边到右半部分 那么我们可 ...

  5. hihoCoder #1291 : Building in Sandbox 逆向处理+并查集维护

    /** 题目:#1291 : Building in Sandbox 链接:https://hihocoder.com/problemset/problem/1291 题意:就是一个三维的空间里,按照 ...

  6. Codeforces325 D【并查集维护连通性】

    参考:大牛blog 思路: 因为是环,所以可以复制一下图,先判断一下和他是不是和与他相邻的8个之一的一个障碍使得构成了一个环,环就是一个连通,用并查集维护即可: 如果没有就ans++,然后并把这个点加 ...

  7. 2019牛客暑期多校训练营(第八场)E:Explorer(LCT裸题 也可用线段树模拟并查集维护连通性)

    题意:给定N,M,然后给出M组信息(u,v,l,r),表示u到v有[l,r]范围的通行证有效.问有多少种通行证可以使得1和N连通. 思路:和bzoj魔法森林有点像,LCT维护最小生成树.  开始和队友 ...

  8. HDU 3018 Ant Trip (并查集求连通块数+欧拉回路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3018 题目大意:有n个点,m条边,人们希望走完所有的路,且每条道路只能走一遍.至少要将人们分成几组. ...

  9. 紫书 习题 11-12 UVa 1665 (并查集维护联通分量)

    这道题要逆向思维 反过来从大到小枚举, 就是在矩阵中一点一点加进去数字,这样比较 好操作, 如果正着做就要一点一点删除数字, 不好做. 我们需要在这个过程中维护联通块的个数, 这里用到了并查集. 首先 ...

随机推荐

  1. JS 语言基础

    两个变量 相加 var s="今天下雨了"; var i=10; alert(i+s); 这里的i+s是拼接的意思   显示出来是  今天下雨了10 假设我改  s="2 ...

  2. C#调用Lame.exe

    string lameEXE = @"D:\lame3.100\lame.exe"; string lameArgs = "-b 128"; string wa ...

  3. Android学习总结(十七) ———— Handler 的使用

    一.基本概念  handler通俗一点讲就是用来在各个线程之间发送数据的处理对象.在任何线程中,只要获得了另一个线程的handler,则可以通过  handler.sendMessage(messag ...

  4. redis 一些使用过的命令

    因为我是JAVA的,所以也是用java的api 主要是文档看起来太麻烦,自己英文也不好,每次用之前都要看一遍,自己把常用的一点点的放进来,方便使用 分布式连接池对象配置 JedisPoolConfig ...

  5. 调用 C 动态库

    调用 C 动态库 由 王巍 (@ONEVCAT) 发布于 2015/11/04 C 是程序世界的宝库,在我们面向的设备系统中,也内置了大量的 C 动态库帮助我们完成各种任务.比如涉及到压缩的话我们很可 ...

  6. HTML 显示和隐藏浏览器滚动条

    滚动条和overflow有关 显示: overflow-x:auto; overflow-y:auto; overflow-x:scroll; overflow-y:scroll; 隐藏: overf ...

  7. 【Java_基础】JVM内存模型与垃圾回收机制

    1. JVM内存模型 Java虚拟机在程序执行过程会把jvm的内存分为若干个不同的数据区域来管理,这些区域有自己的用途,以及创建和销毁时间. JVM内存模型如下图所示 1.1 程序计数器 程序计数器( ...

  8. iptables IP流量统计

    最后是使用ipset进行流量统计,iptaccount资料太少而且还跟网上说明的操作情况不相符,继续看源码分析组长老大都不高兴.ipset使用帮助 1. 创建ipset集合:ipset create ...

  9. 【Linux命令大全】

    Linux常用命令大全 系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部 ...

  10. 微信小程序开发 给微信发送模板消息提示openId无效

    参数我都给好了,也是post的raw方式发送请求, openId是绝对没有问题的. 但就是一直报如下错误 {"errcode":40003,"errmsg":& ...