题目链接: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(二分+广搜)的更多相关文章

  1. 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 ...

  2. hdu 1495 非常可乐 广搜

    #include<iostream> #include<cstdio> #include<cstring> #include<queue> ][][]; ...

  3. hdu 1342.. 复习广搜 顺便练习一下一个脑残的格式

    In a Lotto I have ever played, one has to select 6 numbers from the set {1,2,...,49}. A popular stra ...

  4. hdu 5025 Saving Tang Monk 状态压缩dp+广搜

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092939.html 题目链接:hdu 5025 Saving Tang Monk 状态压缩 ...

  5. hdu 5094 Maze 状态压缩dp+广搜

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092176.html 题目链接:hdu 5094 Maze 状态压缩dp+广搜 使用广度优先 ...

  6. HDU 5652 India and China Origins 二分优化+BFS剪枝

    题目大意:给你一个地图0代表可以通过1代表不可以通过.只要能从第一行走到最后一行,那么中国与印度是可以联通的.现在给你q个点,每年风沙会按顺序侵蚀这个点,使改点不可通过.问几年后中国与印度不连通.若一 ...

  7. Combine String HDU - 5707 dp or 广搜

    Combine String HDU - 5707 题目大意:给你三个串a,b,c,问a和b是不是恰好能组成c,也就是a,b是不是c的两个互补的子序列. 根据题意就可以知道对于c的第一个就应该是a第一 ...

  8. hdu 1242:Rescue(BFS广搜 + 优先队列)

    Rescue Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submis ...

  9. 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. 学习的目的:理解<转>

    http://www.hkuspacechina.com/chs/news-and-events/news/detail/news-first-day-of-school-2015-04-23 学习的 ...

  2. CSS鼠标悬停图片加边框效果,不位移的方法

    <!DOCTYPE HTML> <html lang="en-US"> <head> <title>css实现鼠标悬停时图片加边框效 ...

  3. 【MongoDB】MongoDB 3.2 SCRAM-SHA-1验证方式

    新版本已取消addUser方法,改使用createUser方法 官方地址:https://docs.mongodb.com/manual/tutorial/create-users/ 官方地址:htt ...

  4. 安卓基于WifiScanner的签到APP

    没图说个JB?首先上图:      友情提醒:后台数据库使用的是Bmob后端云 主要设计思路:首先选一个附近的wifi,输入签到码,进行签到. 签到之后会启动一个后台线程每隔一段时间扫描附近wifi, ...

  5. MongoDB(七)MongoDb数据结构

    首先,向数据库插入一条bjson数据 首先是定义文档,然后使用admin用户名密码登录,进入test数据库,向test数据库中插入此文档("表名称和表中的记录") 插入结果,查看m ...

  6. 简单三个表之间关联 与 case when语句的应用

    select p.conttract_id,l.order_code,jz.cur_branch from wy_auto_workflow_log l,wg_pjhsb p,wg_jzmb jz w ...

  7. 你是否经常忘记网站上的各种密码?分享个密码管理软件LastPass

      现在网络那么发达,我们上网的每个人势必会在各个网站上登陆,那势必会有一堆密码需要管理,那怎么能记住那么多网站的密码呢?我之前的做法是设置几个常用的密码,好多不重要的网站用一个,重要的网站用一个,然 ...

  8. JS 弹出层

    var name='提示';   //网页名称,可为空; var iWidth=550;      //弹出窗口的宽度; var iHeight=250;     //弹出窗口的高度; var iTo ...

  9. Orcle基本语句(四)

    --显示员工的编号,姓名,工资,工资级别,所在部门的名称;(使用emp表) SELECT * FROM emp; SELECT * FROM salgrade; SELECT * FROM dept; ...

  10. ubuntu中搭建php7+mongodb方法

    首先照着这篇文章操作 http://blog.csdn.net/Toshiya14/article/details/51417076 结果发现一直报Cannot find OpenSSL's libr ...