题意:一个图,n个障碍,求联通块

思路: 图很大,障碍物很少。把联通的障碍物块抠出来,然后暴力。

代码:

#include<bits/stdc++.h>
using namespace std;
#define MEM(a,b) memset(a,b,sizeof(a))
#define bug puts("bug");
#define PB push_back
#define MP make_pair
#define X first
#define Y second
typedef unsigned long long ll;
typedef pair<int,int> pii;
const int maxn=1e5+10;
const int mod=1000000007;
using namespace std;
int t,n,r,c,x,y,ca;
pii pp[maxn];
int dir[8][2]={1,0,1,-1,1,1,0,1,0,-1,-1,1,-1,0,-1,-1};
int dd[4][2]={1,0,0,1,0,-1,-1,0};
int mp[205][205],vp[205][205];
vector<ll> ans;
set<pii> vis,S;
int dfs(int x,int y,int mix,int miy,int mxx,int mxy){int ret=1,tmp;vp[x][y]=1;for(int i=0;i<4;i++){int xx=x+dd[i][0],yy=y+dd[i][1];if(xx<0&&mix!=1) ret=-1;if(yy<0&&miy!=1) ret=-1;if(xx>mxx-mix&&mxx!=r) ret=-1;if(yy>mxy-miy&&mxy!=c) ret=-1;if(xx<0||yy<0||xx>mxx-mix||yy>mxy-miy||vp[xx][yy]||mp[xx][yy])continue;tmp=dfs(xx,yy,mix,miy,mxx,mxy);if(tmp==-1||ret==-1) ret=-1;else ret+=tmp;}return ret;
}void bfs(pii P){queue<pii> Q;Q.push(P);vis.insert(P);vector<pii> tp;int mix=1e9+10,miy=1e9+10,mxx=-1,mxy=-1;while(!Q.empty()){pii t=Q.front();mix=min(mix,t.X);miy=min(miy,t.Y);mxx=max(mxx,t.X);mxy=max(mxy,t.Y);tp.PB(t);Q.pop();for(int i=0;i<8;i++){pii nxt=MP(t.X+dir[i][0],t.Y+dir[i][1]);if(!vis.count(nxt)&&S.count(nxt))Q.push(nxt),vis.insert(nxt);}}MEM(mp,0);MEM(vp,0);int ret=0;for(int i=0;i<tp.size();i++) mp[tp[i].X-mix][tp[i].Y-miy]=1;for(int i=0;i<=mxx-mix;i++)for(int j=0;j<=mxy-miy;j++)if(mp[i][j]==0&&vp[i][j]==0&&(ret=dfs(i,j,mix,miy,mxx,mxy))>0) ans.PB(ret);return;
}
int main(){for(cin>>t,ca=1;ca<=t;ca++){S.clear(),vis.clear(),ans.clear();cin>>r>>c>>n;for(int i=0;i<n;i++) cin>>pp[i].X>>pp[i].Y,S.insert(pp[i]);for(int i=0;i<n;i++) if(vis.count(pp[i])==0) bfs(pp[i]);ll sum=(ll)r*c;for(int i=0;i<ans.size();i++) sum-=ans[i];ans.PB(sum-n);sort(ans.begin(),ans.end());cout<<"Case #"<<ca<<":\n";cout<<ans.size()<<endl;for(int i=0;i<ans.size();i++) cout<<ans[i]<<" \n"[i==ans.size()-1];}return 0;
}

转载于:https://www.cnblogs.com/zhangxianlong/p/10672502.html

hdu 5925 搜索相关推荐

  1. HDU - 5925 Coconuts (二维离散化+求联通块)

    原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=5925 题意:求连通块的个数,以及每个联通块中点的个数. 数据范围:1e9 思路:离散化之后,dfs求联 ...

  2. hdu 5925.Coconuts

    http://acm.hdu.edu.cn/showproblem.php?pid=5925 题意:求一个图有多少连通块,按增序输出,但是图比较大需要离散化 像个傻子一样想了一下午怎么根据给出的点求能 ...

  3. 2014广州网络赛1003||hdu 5024 搜索

    http://acm.hdu.edu.cn/showproblem.php?pid=5024 Wang Xifeng's Little Plot Time Limit: 2000/1000 MS (J ...

  4. hdu 1186(搜索+HASH)

    方程的解数 Time Limit: 15000MS   Memory Limit: 128000K Total Submissions: 7045   Accepted: 2417 Case Time ...

  5. hdu 4665 搜索

    思路:直接搜索 #include<iostream> #include<cstdio> #include<algorithm> #include<cstrin ...

  6. HDU 5925 Coconuts

    2016 CCPC 东北四省赛 D. 一道好题. 现场写崩了. 赛后LSh跟我讲了一种离散化的做法, 没听懂. 题意 一个$R \cdot C (R, C\le 10^9)$ 的矩形点阵上有 $n   ...

  7. HDU 5925 Coconuts [二维离散化+dfs]

    题意: 有n*m的方阵 上面都是白的 其中有n个黑色的点 ,问你黑色的点把白色的点分成了几个部分,每个部分的点有多少. 分析: 因为给出的点最多只有200个,而整张图就有1e9个,所以离散化然后dfs ...

  8. HDU - 5925 D - Coconuts

    D - Coconuts 题 意:给你一个R*C的矩阵,有K堵墙,问你有几个联通快,每个联通块的元素是多少? 数据范围: 1<=R,C<=1e9 0<=k<=200 输入样例: ...

  9. mysql ansi quotes_mysql ANSI_QUOTES 这个sql_mode的作用(字段可以使用双引号)

    python数据类型详解 目录1.字符串2.布尔类型3.整数4.浮点数5.数字6.列表7.元组8.字典9.日期 1.字符串1.1.如何在Python中使用字符串a.使用单引号(')用单引号括起来表示字 ...

最新文章

  1. 1.3亿突触、数万神经元,谷歌、哈佛发布史上最强三维人脑地图
  2. Hibenate工具类(实现增/删/改/查)
  3. 游戏开发模式一:组件模式(Component)
  4. spring 之 init-method InitializingBean
  5. Unity客户端开发优化要点
  6. 机器人 瓷砖墙面清洗_墙壁清洁机器人解析
  7. 系统查找存储过程和触发器
  8. python 数据内容保留最后一位_python3-数据结构和算法 -- 1.3 保留最后 N 个元素
  9. dtproperties表小解[网络收集]
  10. 认真与随便,结果有天壤之别
  11. SQL Server 不允许保存更改的解决方法
  12. python实现神经网络梯度下降算法_python实现随机梯度下降(SGD)
  13. 工控计算机+isa接口,研华工控机IPC-610系列可提供多个PCI、ISA总线
  14. 内核层读写应用层文件,使用filp_open函数——完美
  15. 深度技术ghost win8 32位/64位装机旗舰版V2014
  16. 假设从键盘输入从某日凌晨零点零分零秒到现在已经经历的时间(单位:秒),编译程序计算到现在为止已经过了多少天?现在的时间是多少?
  17. 好青年雷军:奖学金都被我拿遍了
  18. Hadoop3.3.4最新版本安装分布式集群部署
  19. Chrome浏览器无法打开产品稿原型Axure RP Extension for Chrome 解决方法
  20. Freemodbus 移植过程记录

热门文章

  1. 【Python学习】 - pyecharts包 - 地图可视化
  2. 【PAT天梯】【L2-2 小字辈(左子右兄加强版)】(树,水题)
  3. 【CodeForces - 892C 】Pride (数学,思维构造,gcd)
  4. 【HDU - 2203】 亲和串 (思维题,可选KMP)
  5. Waymo离线点云序列3D物体检测网络 (3D Auto Labeling): Offboard 3D Object Detection from Point Cloud Sequences
  6. webpack打包前端项目入门
  7. PCA算法中样本方差和协方差的无偏估计与n-1的由来
  8. php mysql 菜鸟_PHP 和 MySQL 基础教程(四)
  9. linux安装mysql后怎么进去_linux安装mysql详细步骤
  10. 递归Java_递归的Java实现