【倒跑并查集维护连通块】NCPC 2016 A. Artwork
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的更多相关文章
- P1197 [JSOI2008]星球大战(并查集判断连通块+正难则反)
P1197 [JSOI2008]星球大战(并查集判断连通块+正难则反) 并查集本来就是连一对不同父亲的节点就的话连通块就少一个. 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统 ...
- 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 ...
- BZOJ 1015: [JSOI2008]星球大战starwar(并查集求连通块+离线处理)
http://www.lydsy.com/JudgeOnline/problem.php?id=1015 题意: 思路:好题啊!!! 这道题目需要离线处理,先把所有要删的点给保存下来,然后逆序加点,这 ...
- [Codeforces 1027 F] Session in BSU [并查集维护二分图匹配问题]
题面 传送门 思路 真是一道神奇的题目呢 题目本身可以转化为二分图匹配问题,要求右半部分选择的点的最大编号最小的一组完美匹配 注意到这里左边半部分有一个性质:每个点恰好连出两条边到右半部分 那么我们可 ...
- hihoCoder #1291 : Building in Sandbox 逆向处理+并查集维护
/** 题目:#1291 : Building in Sandbox 链接:https://hihocoder.com/problemset/problem/1291 题意:就是一个三维的空间里,按照 ...
- Codeforces325 D【并查集维护连通性】
参考:大牛blog 思路: 因为是环,所以可以复制一下图,先判断一下和他是不是和与他相邻的8个之一的一个障碍使得构成了一个环,环就是一个连通,用并查集维护即可: 如果没有就ans++,然后并把这个点加 ...
- 2019牛客暑期多校训练营(第八场)E:Explorer(LCT裸题 也可用线段树模拟并查集维护连通性)
题意:给定N,M,然后给出M组信息(u,v,l,r),表示u到v有[l,r]范围的通行证有效.问有多少种通行证可以使得1和N连通. 思路:和bzoj魔法森林有点像,LCT维护最小生成树. 开始和队友 ...
- HDU 3018 Ant Trip (并查集求连通块数+欧拉回路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3018 题目大意:有n个点,m条边,人们希望走完所有的路,且每条道路只能走一遍.至少要将人们分成几组. ...
- 紫书 习题 11-12 UVa 1665 (并查集维护联通分量)
这道题要逆向思维 反过来从大到小枚举, 就是在矩阵中一点一点加进去数字,这样比较 好操作, 如果正着做就要一点一点删除数字, 不好做. 我们需要在这个过程中维护联通块的个数, 这里用到了并查集. 首先 ...
随机推荐
- codevs 1277 生活大爆炸 2012年CCC加拿大高中生信息学奥赛
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description Sheldon and Leonard are physicists wh ...
- PHP开发基础视频教程
PHP现今作为互联网运用很广泛的编程语言,市场需求量也越来越高,而PHP开发工程师的薪资也是一路水涨船高,更多的人看到了PHP的发展前景,纷纷都想投入到PHP的开发大军中来,那么对于很多转行或者零基础 ...
- org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'userId' not found. Available parameters are [arg1, arg0, param1, param2]
2018-06-27 16:43:45.552 INFO 16932 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : ...
- vue watch 监听
1.普通的watch data() { return { frontPoints: 0 } }, watch: { frontPoints(newValue, oldValue) { console. ...
- webpack之postcss集成
项目 为了 兼容各个浏览器,需要加各种 c3前缀,如果手动的加肯定 相对比较麻烦,但是现在有webpack,gulp之类的 工具可以自动给我们加上,可以说效率上加速不少.如果 配置中 做个happyp ...
- VC-基础:关于一些符号的意义
GUI应用程序:Graphic User Interface图形 用户 接口 SDI:单文档程序(典型的记事本就是SDI) MID:多文档程序(比如VS2008默认就是多文档的)
- Java产生GUID
/** * 产生GUID */public static final String generateGUID(){ UUID uuid = UUID.randomUUID(); return uuid ...
- Bootstrap历练实例:输入框组的大小
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- shell脚本,alias别名命令用法。
[root@localhost ~]# alias alias cp='cp -i' alias mv='mv -i' alias rm='rm -i' [root@localhost ~]# [ro ...
- Apache Commons Configuration的应用
Apache Commons Configuration的应用 Commons Configuration是一个java应用程序的配置管理工具.可以从properties或者xml文件中加载软件的配置 ...