【倒跑并查集维护连通块】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 (并查集维护联通分量)
这道题要逆向思维 反过来从大到小枚举, 就是在矩阵中一点一点加进去数字,这样比较 好操作, 如果正着做就要一点一点删除数字, 不好做. 我们需要在这个过程中维护联通块的个数, 这里用到了并查集. 首先 ...
随机推荐
- moment.js获取当前日期是当年的第几周
/** * 实现当前日期是当年的第几周,再向前和向后推几周 * js数组保存当前日期的前后两周(共五周的数据) * */ var initSearchMajorChanges = function() ...
- SQLServer查询死锁
--查询死锁 select request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tableName from sys ...
- 使用JavaScript调用手机平台上的原生API
我之前曾经写过一篇文章使用Cordova将您的前端JavaScript应用打包成手机原生应用,介绍了如何使用Cordova框架将您的用JavaScript和HTML开发的前端应用打包成某个手机平台(比 ...
- mongo ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused
解决方法 rm /var/lib/mongodb/mongod.lock
- 关于CSS3三角的实现
1,向上的三角 ;; ;; </html> 3,向左的三角 ;; </html> 4,向右的三角 ;; ...
- cdlinux
xset q xset s 6000 xset -dpms ntpdate time.nist.gov date
- 给 MSYS2 添加国内源
https://wiki.qt.io/MSYS2pacman -S base-devel git mercurial svn wget p7zip软件包 开发包 http://mirrors.ustc ...
- PAT (Basic Level) Practise (中文)-1032. 挖掘机技术哪家强(20)
PAT (Basic Level) Practise (中文)-1032. 挖掘机技术哪家强(20) http://www.patest.cn/contests/pat-b-practise/1032 ...
- java第九次作业:第九章例题3个
作业1: 例题9.1 制作圆类,根据圆的半径求出周长及面积 package com.swift; //抽象的方法构成类,把属性和方法进行封装 public class Circle { // 两个方面 ...
- CS193p Lecture 8 - Protocols, Blocks and Animation
一.协议(Protocols) 1. 声明协议 @protocol Foo <Xyzzy, NSObject> // ... @optinal // @required //... @en ...