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 ...
随机推荐
- 1.3 Makefile 工程管理
1. 为什么得用Makefile 单步命令生成led.bin [root@cfm880 lesson1]# cd .. [root@cfm880 Part1]# mkdir lesson3 [root ...
- (转)Silverlight 与 JS交互
转自 http://www.cnblogs.com/wt616/archive/2011/10/08/2201987.html 1.Silverlight直接调用JS的函数: 这个很简单,只要在HTM ...
- Qt编程之mapx组件编程
今天利用组件打包程序写了一些小例子,给大家贴出来,顺便提高一下记忆. 上一篇介绍了直接使用控件和使用控件打包程序对控件进行编程的方法.个人感觉后者编程更方便.不说废话了: 头文件中所需要的类型指针对象 ...
- android windows
获取当前设备的分辨率 DisplayMetrics dm=new DisplayMetrics(); //新建一个分辨对象 WindowManager wm=this.getWindowManager ...
- Java基础--定时任务Timer
Java基础--定时任务Timer 一.Timer介绍 java.util.Timer java.util.TimerTask Timer是一个定时器类,通过该类可以为指定的定时任务进行配置.Time ...
- android开发--okhttp
一.okhttp简单实用: 一般的get请求 一般的post请求 基于Http的文件上传 文件下载 加载图片 支持请求回调,直接返回对象.对象集合 支持session的保持 二.实用教程 1.添加an ...
- [python]获取文件夹下所有文件名
#---picknames.py---import os filenames = os.listdir(os.getcwd()) for name in filenames: print(name)
- 有WebService的项目中写applicationContex.xml文件时应注意!!!
这是一个简单的WebService实例,来看下如下的applicationContex.xml文件: 1.有XFire的配置 <bean id="baseWebService" ...
- 快速卸载VS2015的办法
1.以管理员身份运行CMD: 2.在CMD里输入F:\>vs_enterprise.exe /uninstall /force
- Git 操作本地分支与远程分支
1 查看本地分支 git branch 2 查看远程分支 git branch -a 3 新建远程分支 git checkout -b developr git push origin develop ...