HDU 5652(二分+广搜)
题目链接:http://acm.hust.edu.cn/vjudge/contest/128683#problem/E
题目大意:给定一只含有0和1的地图,0代表可以走的格子,1代表不能走的格
子。之后过了M年,每年把一个格子变成1, 即每年会有一个格子不能走。问地
图上界和下界连通共多少年。如果到M年之后依然连通,则输出-1.
给定的年份数据范围是10^5, 图的大小是500*500,由于图是一直在改变的,
因此每次都需要进行变更操作。然而如果变更一次广搜一次明显会TLE。仔细思
考会发现,当某一年上下界不再连通时,之后的所有年份必定不会连通;如果某
年上下界依然连通,则此年之前的所有年份都是连通的(因为此年是以前的年份
时的地图再封杀一些后得到的)。这么想之后可以发现寻找不连通的那一年可以
通过二分查找来实现。一些神犇的题解报告都是用并查集过的,然而蒟蒻的并查
集实在是太渣了...暴力解题出奇迹。
下面是AC代码:
/** Memory: 3308 KB Time: 1216 MS
Language: G++ Result: Accepted **/
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <queue>
using namespace std;
int n, m, x[], y[], vis[][];
char maps[][];
int dir[][] = {{, }, {, -}, {, }, {-, }};
struct ad
{
int x, y;
};
bool bfs(int x, int y)
{
queue<ad>Q;
ad now, next;
memset(vis, , sizeof(vis));
now.x = x;
now.y = y;
vis[now.x][now.y] = ;
Q.push(now);
while(Q.size())
{
now = Q.front();
Q.pop();
if(now.x==n-)return true;
for(int i=; i<; i++)
{
next.x = now.x + dir[i][];
next.y = now.y + dir[i][];
if(next.x>= && next.x<n && next.y>= && next.y<m && maps[next.x][next.y]=='' && !vis[next.x][next.y])
{
vis[next.x][next.y] = ;
Q.push(next);
}
}
}
return false;
}
bool check()
{
for(int i=; i<m; i++)
{
if(maps[][i]=='' && bfs(, i))
return true;
}
return false;
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
scanf("%d %d", &n, &m);
for(int i=; i<n; i++)
scanf("%s", maps[i]);
int t;
scanf("%d", &t);
for(int i=; i<=t; i++)
scanf("%d %d", &x[i], &y[i]);
int l = , r = t, mid, ans = -;
while(l<=r)
{
mid = (l+r)/;
for(int i=; i<=mid; i++)
maps[x[i]][y[i]] = '';
if(check()) l = mid + ;
else
{
ans = mid;
r = mid-;
}
for(int i=; i<=mid; i++)
maps[x[i]][y[i]] = '';
}
printf("%d\n", ans);
}
return ;
}
HDU 5652(二分+广搜)的更多相关文章
- NOIP 模拟赛 23 T4 大逃亡O(二分+广搜)(∩_∩)O
题目描述 给出数字N(1≤N≤10000),X(1≤x≤1000),Y(1≤Y≤1000),代表有N个敌人分布一个X行Y列的矩阵上,矩形的行号从0到X-1,列号从0到Y-1再给出四个数字x1,y1,x ...
- hdu 1495 非常可乐 广搜
#include<iostream> #include<cstdio> #include<cstring> #include<queue> ][][]; ...
- hdu 1342.. 复习广搜 顺便练习一下一个脑残的格式
In a Lotto I have ever played, one has to select 6 numbers from the set {1,2,...,49}. A popular stra ...
- hdu 5025 Saving Tang Monk 状态压缩dp+广搜
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092939.html 题目链接:hdu 5025 Saving Tang Monk 状态压缩 ...
- hdu 5094 Maze 状态压缩dp+广搜
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092176.html 题目链接:hdu 5094 Maze 状态压缩dp+广搜 使用广度优先 ...
- HDU 5652 India and China Origins 二分优化+BFS剪枝
题目大意:给你一个地图0代表可以通过1代表不可以通过.只要能从第一行走到最后一行,那么中国与印度是可以联通的.现在给你q个点,每年风沙会按顺序侵蚀这个点,使改点不可通过.问几年后中国与印度不连通.若一 ...
- Combine String HDU - 5707 dp or 广搜
Combine String HDU - 5707 题目大意:给你三个串a,b,c,问a和b是不是恰好能组成c,也就是a,b是不是c的两个互补的子序列. 根据题意就可以知道对于c的第一个就应该是a第一 ...
- hdu 1242:Rescue(BFS广搜 + 优先队列)
Rescue Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
- hdu 1195:Open the Lock(暴力BFS广搜)
Open the Lock Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
随机推荐
- centos 解压jdk安装包方式安装jdk 出现 java/lang/NoClassDefFoundError: java/lang/Object 错误
安装完JDK ,设定环境变量后出现这个错误: [root@localhost lib]# javacError occurred during initialization of VMjava/lan ...
- Salesforce 动态审批
由于Salesforce只支持根据条件动态选择审批分支,如果我们想进一步支持动态根据页面的某种条件选择审批人,Salesforce是不支持的.因此我们只能通过override salesforce审批 ...
- Javascript BOM对象
BOM是browser object model的缩写,简称浏览器对象模型. window对象(BOM的核心对象) 表示浏览器的一个实例,在浏览器中,window对象有着双重角色,它既是通过Javas ...
- 配置Struts.xml DTD文件报错
报错信息为: The content of element type "struts" must match "((package|include|bean| cons ...
- css定位和浮动
1.css中一切元素皆为框.div.p.h1等为块框:span.strong等为行内框,(在文本中每一行会被自动默认为行框,行框和行内框是不一样的概念).通过display可以改变框的类型,行内框通过 ...
- Spring boot开发过程遇到的一些小问题
1.无法将yml文件自动注入到对应的类的实例中去: pom.xml文件里没有加如下依赖 <dependency> <groupId>org.springframework.bo ...
- 移动端穿插着PC端自动化-Python基础(干货)
1.前面已经把所有前期工作完成了 下面进行一些简单的小脚本来更好的了解Python.对Python有一些基础的童鞋理解起来会比较容易,我刚接触的时候也会有点懵的,现在简单的也是没问题了. 大牛请不要喷 ...
- 客户端挂载NFS服务器中的共享目录(用户后台上传图片与前台上传图片放在同一个服务器上)
服务器端使用showmount命令查询NFS的共享状态 # showmount -e //默认查看自己共享的服务,前提是要DNS能解析自己,不然容易报错 # showmount -a //显示已经与客 ...
- springMVC和mybatis整合,jsp对时间进行格式化
发现jsp显示的时间,是java Date类型的默认格式,一串鸡肠.... 可在jsp对输出进行格式化: 1.加入taglib <%@ taglib prefix="fmt" ...
- centos环境自动化批量安装软件脚本
自动化安装jdk软件部署脚本 准备工作: 1.在执行脚本的服务器上生成免密码公钥: 安装expect命令 yum install -y expect ssh-keygen 三次回车 2.将jdk-7u ...