NCPC2016-A-ArtWork
题目描述
x 1 ≤ x ≤ x 2 and y 1 ≤ y ≤ y 2 .
The beauty of an artwork is the number of regions in the grid. Each region consists of one or more white squares that are connected to each other using a path of white squares in the grid, walking horizontally or vertically but not diagonally. The initial beauty of the artwork is 1. Your task is to calculate the beauty after each new stroke. Figure A.1 illustrates how the beauty of the artwork varies in Sample Input 1.
输入
Then follow q lines that describe the strokes. Each line consists of four integers x 1 , y 1 , x 2 and y 2 (1 ≤ x 1 ≤ x 2 ≤ n, 1 ≤ y 1 ≤ y 2 ≤ m). Either x 1 = x 2 or y 1 = y 2 (or both).
输出
样例输入
- 4 6 5
- 2 2 2 6
- 1 3 4 3
- 2 5 3 5
- 4 6 4 6
- 1 6 4 6
样例输出
- 1
- 3
- 3
- 4
- 3
- 题意是给你一个n*m的矩阵,q次询问,每次将连续的一些竖直或水平的格子染黑,问每一步操作之后白色联通块的个数
- 从最后一种局面往前走,先求出所有操作之后白色联通块的数量,然后逐条删去黑线,对新出现的白格子,要么和原有的某个联通块相连,要么属于单独的联通块
- 用并查集维护联通块
- #include <bits/stdc++.h>
- #define ll long long
- using namespace std;
- const int N=1e3+;
- const int dx[]={,-,,};
- const int dy[]={,,,-};
- int n,m,q,cnt;
- struct line{
- int x1,x2,y1,y2;}li[N*];
- int f[N*N],num[N][N],ans[N*];
- int Hash(int x,int y)
- {
- return (x-)*m+y;
- }
- int fund(int x)
- {
- if (f[x]==x) return f[x];
- return f[x]=fund(f[x]);
- }
- void join(int x,int y)
- {
- int fx=fund(x),fy=fund(y);
- if (fx!=fy)
- {
- cnt--;
- f[fx]=fy;
- }
- }
- void dfs(int x,int y)
- {
- int id=Hash(x,y);
- for (int i=;i<;i++)
- {
- int fx=x+dx[i],fy=y+dy[i];
- if (fx<||fx>n||fy<||fy>m) continue;
- if (num[fx][fy]==)
- {
- join(id,Hash(fx,fy));
- }
- }
- }
- void print(line l)
- {
- for (int i=l.x1;i<=l.x2;i++)
- for (int j=l.y1;j<=l.y2;j++)
- {
- if (num[i][j]==) cnt--;
- num[i][j]++;
- }
- }
- void reprint(line l)
- {
- for (int i=l.x1;i<=l.x2;i++)
- for (int j=l.y1;j<=l.y2;j++)
- {
- num[i][j]--;
- if (num[i][j]==)
- {
- cnt++;
- dfs(i,j);
- }
- }
- }
- int main()
- {
- scanf("%d%d%d",&n,&m,&q);
- cnt=n*m;
- for (int i=;i<=cnt;i++) f[i]=i;
- for (int i=;i<=q;i++)
- {
- scanf("%d%d%d%d",&li[i].x1,&li[i].y1,&li[i].x2,&li[i].y2);
- print(li[i]);
- }
- for (int i=;i<=n;i++)
- for (int j=;j<=m;j++)
- if (num[i][j]==) dfs(i,j);
- for (int i=q;i>=;i--)
- {
- ans[i]=cnt;
- reprint(li[i]);
- }
- for (int i=;i<=q;i++) printf("%d\n",ans[i]);
- return ;
- }
NCPC2016-A-ArtWork的更多相关文章
- Artwork
A template for an artwork is a white grid of n × m squares. The artwork will be created by painting ...
- NCPC 2016 October 8,2016 Artwork
Problem A Artwork Problem ID: artwork Time limit: 4 seconds A template for an artwork is a white gri ...
- Gym 102346A Artwork dfs
Artwork Gym - 102346A 题意:给n*m的地图,入口是(0,0),出口是(n,m),其中有k个监视器,坐标是(xi,yi),监视半径是r,问一个人能不能不被监视到,从起点到终点. 如 ...
- Artwork (Gym - 102346A)【DFS、连通块】
Artwork (Gym - 102346A) 题目链接 算法 DFS,连通块 时间复杂度:O(k*n + k * k) 1.这道题就是让你判断从(0,0)到(m,n),避开中途所有的传感器(传感器的 ...
- UVa LA 4636 Cubist Artwork 难度: 0
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
- UVALive - 4636 Cubist Artwork(贪心)
题目链接 题意 给出正视图和侧视图,判断最少用几个立方体 分析 若存在高度相同的立方块,则以数目多的那面为准. #include <iostream> #include <cstdi ...
- Gym - 101550A Artwork (并查集在线做法)
题目链接 题意:给你一个n*m的网格图,初始时格点全白,每次可以将一段连续的格点涂黑.求出每次操作之后白色连通块的数量. 看了看网上的题解,基本全是离线的做法.其实这道题是有在线的做法的,利用了对偶图 ...
- UVa 1445 - Cubist Artwork
统计正面看高度为i的竖条个数为cnt1[i], 统计侧面看高度为i的竖条个数为cnt2[i]: ans = sum( i * max( cnt1[i], cnt2[i] ) ); ( 1 <= ...
- Artwork 18年中南多校第一场A
一.题意 对于一个矩阵,若干道命令,每道命令将会把某一段格子涂黑,请问每次涂黑之后矩阵中未被涂黑的块的数量? 二.思路 保存每道命令,并且忠实的执行他,到最后一步开始搜索联通块的数量,并将其保存. 之 ...
- Artwork Gym - 101550A 离线并查集
题目:题目链接 思路:每个空白区域当作一个并查集,因为正着使用并查集分割的话dfs会爆栈,判断过于复杂也会导致超时,我们采用离线反向操作,先全部涂好,然后把黑格子逐步涂白,我们把每个空白区域当作一个并 ...
随机推荐
- VANET
VANET知识 VANET与普通网络相比,与IOV的区别: VANET中Greedy Routing:基于距离(GPSR):基于速度和角度:基于道路层(TDR): Repair Strategy:Fa ...
- 软工1816 · Beta冲刺(6/7)
团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 推进Web端完成开发 推进修改一些后端接口的逻辑 着手制作视频 接下来的计划 ...
- 一个简单的加减乘除自动生成小程序(JAVA)
在学习软件工程的时候,遇到一个这样的问题,一个程序员的儿子上小学二年级,老师让家长每天出30道加减题目给学生做,由于家长是个程序员,所以呢,他就自己写了个程序实现,我们可爱的老师于是也叫我们写了一个类 ...
- Matlab图像匹配问题
已知一个任意形状,查找在大图像中最接近的形状位置. 输入:一个小图形状和一张大图 输出:最接近的形状在大图中的位置 假设: (1)已知形状与目标形状有一定的形变. (2)形状与大图像均为二值图像,图中 ...
- 微信之父张小龙经典演讲164页PPT:《微信背后的产品观》
收藏地址:http://www.haokoo.com/internet/8974068.html
- iOS开发值得收藏的博客
http://kobedai.me/ objc.io PS:经典,内容深而广objc中国NSHipster PS:很多小细节NSHipster 中文版唐巧的技术博客 PS:LZ是唐巧的脑残粉…OneV ...
- SQL Server查询已锁的表及解锁
--查询已锁的表 select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName ,* from ...
- rpm安装和二进制安装
rpm包安装 Tomcat RPM安装(先安装JDK + 再安装Tomcat) 1:升级系统自带的JDK(也可以使用oracle的JDK) yum install -y java-1.8.0-open ...
- Spring框架的补充
1.使用xml文件方式配置bean ——property标签ref属性和ref标签区别 <property name=“bean” ref="myBbean" /> r ...
- PHP中define和defined的区别
PHP中define和defined的区别 对于初学者会混淆这两个函数 1.define用来定义一个常量,常量也是全局范围的.不用管作用域就可以在脚本的任何地方访问 常量.一个常量一旦被定义,就不能再 ...