题意:给你n*m个格子每次添加一条黑线,问这些黑线将白格子分成几个部分。

题解:首先将全部黑线涂上,将每个格子标记在那个块上,对于询问从后往前删除,并将删除之后的白格子赋值为新的块,然后并查集合并,结果就是这次询问的块数。

代码:

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e3+5;
int n,m,p;
struct node{int x1,y1,x2,y2;
}s[maxn*10]; int top=0;
int mp[maxn][maxn],vis[maxn][maxn],a[maxn][maxn],b[maxn*maxn];
int zhuan(int i,int j){return (i-1)*m+j;
}
void init(){for(int i=1;i<=n*m;i++) b[i]=i;for(int i=1;i<=p;i++){if(s[i].x1==s[i].x2){int y1=s[i].y1,y2=s[i].y2;for(int j=min(y1,y2);j<=max(y1,y2);j++){mp[s[i].x1][j]++;}}else if(s[i].y1==s[i].y2){int x1=s[i].x1,x2=s[i].x2;for(int j=min(x1,x2);j<=max(x1,x2);j++){mp[j][s[i].y1]++;}}}
}
int tx[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
void bfs(int x,int y,int flag){queue<pair<int,int>>Q;Q.push(make_pair(x,y));while(!Q.empty()){pair<int,int>u;u=Q.front(); Q.pop();a[u.first][u.second]=flag;for(int i=0;i<4;i++){int dx=tx[i][0]+u.first;int dy=tx[i][1]+u.second;if(dx<1||dx>n||dy<1||dy>m) continue;if(!vis[dx][dy]&&!mp[dx][dy]){vis[dx][dy]=1;Q.push(make_pair(dx,dy));}}}
}int anss=0,anx[maxn*10];
int fin(int x){return b[x]==x?x:b[x]=fin(b[x]);
}
void solve(){anss=top;for(int i=p;i>=1;i--){anx[i]=anss;if(s[i].x1==s[i].x2){int y1=s[i].y1,y2=s[i].y2;for(int j=min(y1,y2);j<=max(y1,y2);j++){mp[s[i].x1][j]--;if(!mp[s[i].x1][j]) a[s[i].x1][j]=++top,anss++;}for(int j=min(y1,y2);j<=max(y1,y2);j++){if(mp[s[i].x1][j])  continue;int fx=fin(a[s[i].x1][j]);for(int k=0;k<4;k++){int dx=tx[k][0]+s[i].x1;int dy=tx[k][1]+j;if(dx<1||dx>n||dy<1||dy>m) continue;if(!mp[dx][dy]){int fy=fin(a[dx][dy]);if(fx!=fy){b[fy]=fx;anss--;}}}}}else if(s[i].y1==s[i].y2){int x1=s[i].x1,x2=s[i].x2;for(int j=min(x1,x2);j<=max(x1,x2);j++){mp[j][s[i].y1]--;if(!mp[j][s[i].y1]) a[j][s[i].y1]=++top,anss++;}for(int j=min(x1,x2);j<=max(x1,x2);j++){if(mp[j][s[i].y1])  continue;int fx=fin(a[j][s[i].y1]);for(int k=0;k<4;k++){int dx=tx[k][0]+j;int dy=tx[k][1]+s[i].y1;if(dx<1||dx>n||dy<1||dy>m) continue;if(!mp[dx][dy]){int fy=fin(a[dx][dy]);if(fx!=fy){b[fy]=fx;anss--;}}}}}}
}
int main()
{scanf("%d %d %d",&n,&m,&p);for(int i=1;i<=p;i++){scanf("%d %d %d %d",&s[i].x1,&s[i].y1,&s[i].x2,&s[i].y2);}init();for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(!mp[i][j]&&!vis[i][j]){++top;bfs(i,j,top);}}}solve();for(int i=1;i<=p;i++) printf("%d\n",anx[i]);return 0;
}

A - Artwork Gym - 101550A相关推荐

  1. gym:Problem A Artwork(并查集思维题)

    20162017-acmicpc-nordic-collegiate-programming-contest-ncpc-2016 Problem A Artwork 题目链接 http://codef ...

  2. 强化学习(三) - Gym库介绍和使用,Markov决策程序实例,动态规划决策实例

    强化学习(三) - Gym库介绍和使用,Markov决策程序实例,动态规划决策实例 1. 引言 在这个部分补充之前马尔科夫决策和动态规划部分的代码.在以后的内容我会把相关代码都附到相关内容的后面.本部 ...

  3. Gym - 102082G

    Gym - 102082G https://vjudge.net/problem/2198225/origin 对于数列中任意一个数,要么从最左边到它不递减,要么从最右边到到它不递减,为了满足这个条件 ...

  4. 安装gym库_强化学习Gym库学习实践(一)

    最近看了一篇研究方向相关的文章,介绍了一种DQN的应用,感觉还挺新鲜的.想着把这篇文章复现出来,就开始学习强化学习的相关知识,作为一名小白,这一路走的可是真的十分艰难(我太菜了啊!) 看了莫烦Pyth ...

  5. 强化学习环境库 Gym 发布首个社区发布版,全面兼容 Python 3.9

    作者:肖智清 来源:AI科技大本营 强化学习环境库Gym于2021年8月中旬迎来了首个社区志愿者维护的发布版Gym 0.19.该版本全面兼容Python 3.9,增加了多个新特性. 强化学习环境库的事 ...

  6. Gym迎来首个完整环境文档,强化学习入门更加简单!

    深度强化学习实验室 官网:http://www.neurondance.com/ 论坛:http://deeprl.neurondance.com/ 编辑:OpenDeepRL OpenAI Gym是 ...

  7. Codeforces Gym 100513G G. FacePalm Accounting 暴力

    G. FacePalm Accounting Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513 ...

  8. Ubuntu下常用强化学习实验环境搭建(MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2)

    原文地址:http://blog.csdn.net/jinzhuojun/article/details/77144590 和其它的机器学习方向一样,强化学习(Reinforcement Learni ...

  9. OpenAI Gym介绍

    上篇博客介绍了OpenAI Gym.OpenAI Gym与强化学习以及OpenAI Gym的安装,接下来运行一个demo体验一下OpenAI Gym这个平台,以CartPole(倒立摆)为例,在工作目 ...

最新文章

  1. 再来一次的C语言贪吃蛇小游戏(三)
  2. python:绑定方法和非绑定方法
  3. 手把手教学,平衡小车详细教程,平衡车
  4. oracle之单行函数1
  5. linux冷备机怎么切换,linux – 热备用主机vs冷备用主机?
  6. Java之品优购课程讲义_day20(2)
  7. 简单nginx+tomca负载均衡
  8. Python根据正则表达式找到相应的字符串然后进行替换
  9. j循环赋予li id_《Science》子刊:超强Li-S电池诞生!硫负载量高达15mg·cm-2
  10. centos 安装mysql-proxy_详解在Centos 5.2下安装最新Mysql Proxy LUA教程
  11. 图像局部特征(十五)--MSCR
  12. 嵌入式系统——软件设计
  13. 合并多行查询数据到一行:使用自连接、FOR XML PATH('')、STUFF或REPLACE函数
  14. Stata初步处理CFPS数据(merge)
  15. 机器学习理论知识的自学整理(持续更新,建议收藏)
  16. 快速上手Flask(一) 认识框架Flask、项目结构、开发环境
  17. Spring Boot 框架学习笔记(五)( SpringSecurity安全框架 )
  18. NaN == NaN 的结果是什么?
  19. RationalDMIS 7.0量块程序(力合)
  20. Hive正则表达式案例总结

热门文章

  1. 联想小新 Air 13 (Pro) 6,7代笔记本安装Win7系统
  2. DOS批处理简明高级教程
  3. 比较连个字符串差异度
  4. 交换机/路由器实验:最后说些什么
  5. Java--多线程之并发,并行,进程,线程(一)
  6. Python中文文本分句
  7. Python GUI编程—Tkinter实战一(生日快乐小程序)
  8. 什么是APS高级计划排程(生产计划排产)系统主要功能模块有哪些?
  9. 云聚创新力量,助力多云互联:Tungsten Fabric在联通沃云峰会2019上分享开源SDN
  10. 前端网络基础 - 跨域xhr/fetch