【BFS】【map】hdu5925 Coconuts
题意:一张n*m的网格图(n和m可以达到10^9),其中K个点是障碍物(不超过200个),问你没有被障碍物占据的点形成了几个连通块?并且输出各个连通块的大小。
容易证明,大小超过40000的连通块最多只有一个。于是可以从每个与障碍物邻接的非障碍点出发bfs,限制步数不超过40000,这样就可以找到所有小的连通块。最后如果n*m-K-小的连通块的总大小不等于0,则剩下的就是那个大的连通块的大小。
用map打标记进行判重。
#include<cstdio>
#include<queue>
#include<set>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef pair<int,int> Point;
const int dx[]={0,-1,0,1,1,-1,1,-1},dy[]={-1,0,1,0,-1,-1,1,1};
const int dx1[]={0,-1,0,1},dy1[]={-1,0,1,0};
Point p[205];
int T,m,n,K;
int main(){
scanf("%d",&T);
for(int zu=1;zu<=T;++zu){
map<Point,int>vis;
set<Point>za;
vector<ll>vs;
printf("Case #%d:\n",zu);
scanf("%d%d%d",&n,&m,&K);
for(int i=1;i<=K;++i){
scanf("%d%d",&p[i].first,&p[i].second);
za.insert(p[i]);
}
int bj=0;
for(int i=1;i<=K;++i){
int x=p[i].first,y=p[i].second;
for(int j=0;j<8;++j){
int tx=x+dx[j],ty=y+dy[j];
if(tx>=1 && tx<=n && ty>=1 && ty<=m){
if(za.find(Point(tx,ty))==za.end()){
if(!vis[Point(tx,ty)]){
++bj;
queue<Point>q;
q.push(Point(tx,ty));
vis[Point(tx,ty)]=bj;
int cnt=1;
bool flag=1;
while(!q.empty()){
Point U=q.front();
q.pop();
for(int k=0;k<4;++k){
int ttx=U.first+dx1[k],tty=U.second+dy1[k];
if(ttx>=1 && ttx<=n && tty>=1 && tty<=m && za.find(Point(ttx,tty))==za.end()){
int tmp=vis[Point(ttx,tty)];
if(tmp>0 && tmp<bj){
flag=0;
break;
}
else if(tmp==0){
q.push(Point(ttx,tty));
++cnt;
vis[Point(ttx,tty)]=bj;
if(cnt>40000){
flag=0;
goto OUT;
}
}
}
}
}
OUT:
if(flag){
vs.push_back((ll)cnt);
}
}
}
}
}
}
ll sum=0;
for(vector<ll>::iterator it=vs.begin();it!=vs.end();++it){
sum+=(*it);
}
if((ll)n*(ll)m>sum+(ll)K){
vs.push_back((ll)n*(ll)m-sum-(ll)K);
}
sort(vs.begin(),vs.end());
int sz=vs.size();
printf("%d\n",sz);
for(int i=0;i<sz;++i){
printf("%lld",vs[i]);
if(i==sz-1){
puts("");
}
else{
putchar(' ');
}
}
}
return 0;
}
【BFS】【map】hdu5925 Coconuts的更多相关文章
- HDU 5889 Barricade 【BFS+最小割 网络流】(2016 ACM/ICPC Asia Regional Qingdao Online)
Barricade Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- POJ 3414 Pots【bfs模拟倒水问题】
链接: http://poj.org/problem?id=3414 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22009#probl ...
- 【日常学习】【并查集+map】codevs2639 约会计划题解
然而我居然让诸城一中悲剧机房的C++可以编译了··· 直接上题目 题目描写叙述 Description cc是个超级帅哥,口才又好.rp极高(这句话似乎降rp),又非常的幽默,所以非常多mm都跟他关系 ...
- hdoj 1495 非常可乐【bfs隐式图】
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 4474 Yet Another Multiple Problem【2012成都regional K题】 【BFS+一个判断技巧】
Yet Another Multiple Problem Time Limit: 40000/20000 MS (Java/Others) Memory Limit: 65536/65536 K ...
- 【POI xls Java map】使用POI处理xls 抽取出异常信息 --java1.8Group by ---map迭代 -- 设置单元格高度
代码处理逻辑: 代码流程: 1.首先需要创建一个实体 用来存储 相关信息 package com.sxd.test.unusualName; public class NameEntity { pri ...
- 【BFS宽度优先搜索】
一.求所有顶点到s顶点的最小步数 //BFS宽度优先搜索 #include<iostream> using namespace std; #include<queue> # ...
- HDU_1430 魔板 【BFS+康托展开+置换】
一.题面 POJ1430 二.分析 该题与之前做的八数码不同,它是一个2*4的棋盘,并且没有空的区域.这样考虑的情况是很少的,依然结合康托展开,这时康托展开最多也只乘7的阶乘,完全可以BFS先预处理一 ...
- POJ_3126 Prime Path 【BFS+素数打表】
一.题目 http://poj.org/problem?id=3126 二.分析 该题主要是要让我们找到一个$4$位素数到另一个$4$位素数的最少的变换次数,且要求保证每一次变换都满足 1.下一个数必 ...
- 【bfs分层图 dp】hihocoder#1147 : 时空阵
最短路径树上分层dp的一类套路吧 题目大意 幽香这几天学习了魔法,准备建造一个大型的时空传送阵. 幽香现在可以在幻想乡的n个地点建造一些传送门,如果她建造了从地点a与地点b之间的传送门,那么从a到b和 ...
随机推荐
- 微信小程序开发(二)创建小程序
安装完“微信Web开发者工具”后,手机扫描二维码进入页面. 点击“添加项目”,填入之前获得的AppID(无AppID可忽略),输入项目名称“Hello WXapplet”,选定本地文件夹作为项目目录. ...
- vue去除地址栏上的'#'号
const router = new VueRouter({ routes:[], mode :"history"//除去#号 }
- 深入理解Spring系列之十二:@Transactional是如何工作的
转载 https://mp.weixin.qq.com/s/ZwhkUQF1Nun9pNrFI-3a6w 首先从说起.配置了,就必定有对应的标签解析器类,查看NamespaceHandler接口的实现 ...
- 64_o2
openrdf-sesame-queryrender-2.8.10-2.fc26.noarch..> 11-Feb-2017 18:38 52014 openrdf-sesame-queryre ...
- OAuth认证与授权
什么是OAuth授权? 一.什么是OAuth协议 OAuth(开放授权)是一个开放标准. 允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息. 而这种授权无需将用户提供用户名和密 ...
- C/C++——库函数strcpy和strdup比较
版权声明:原创文章,禁止转载. 1. strcpy 原型: extern char *strcpy(char *dest,char *src); 用法: #include <string.h&g ...
- rcnn ->fast rcnn->faster rcnn物体检测论文
faster rcnn中的rpn网络: 特征可以看做一个尺度51*39的256通道图像,对于该图像的每一个位置,考虑9个可能的候选窗口:三种面积{1282,2562,5122}×三种比例{1:1,1: ...
- c++输出保留固定小数位数
cout<<setprecision(6)<<fixed<<ans<<endl;
- HTTPS握手过程
HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密.具体是如何进行加密,解密,验证的,且看下图,下面的称为一次握手. 1. 客户端发起HT ...
- 转:mysql日志(Windows下开启Mysql慢查询、通用日志)
一.Windows下开启Mysql慢查询详解 //show variables like '%quer%';查询是否开启了慢查询!! 第一步:修改my.ini(mysql配置文件) 在my.ini中 ...