白令海峡思路解析

白令海峡!!!题目传送门!
我食言了,并没有先写 ”小埋的最大差值“
但我至少写了!
请看题目

2. 白令海峡

题目ID:9691必做题100分

时间限制: 1000ms

空间限制: 524288kB

题目描述

题目描述

很久很久以前,一座大陆桥横跨西伯利亚东端与美洲大陆西端。

处于进化早期的人类,正以部落的形式在大陆上游荡、捕猎,四海为家。在饥饿与寒冷折磨下,人们不断迁徙。在不知不觉中,也许有一支队伍、也许有许多支队伍,跨过了大陆桥,来到了美洲大陆。人类繁衍与进化的脚步自此迈上了美洲大陆。

然而,板块位移,地质变迁,陆地慢慢被大海淹没,广阔的海峡将亚欧大陆和美洲大陆的人类分隔开来。也许是万年,也许是十万年,两岸的人类才能再度相见。

大陆架可以看作一个n×m 的矩形区域,区域内有一些格子已经被海洋所淹没。在接下来的q 年里,区域内还有一些格子会逐个沉没。那么到底是哪一年两座大陆才会分隔开来呢?

输入格式

第一行一个整数 T 代表数据组数。

每组数据第一行两个整数 n 和 m,

接下来 n 行每行 m 个整数,为 1 表示已经被淹没,为 0 表示仍为陆地。

接下来一行一个整数 q,

接下来 q 行每行两个整数,表示沉没的格子坐标。

输出格式

每组数据输出一行,代表答案。如果 q 年之后还连通,输出-1

样例输入

1
4 6
011010
000010
100001
001000
7
0 3
1 5
1 3
0 0
1 2
2 4
2 1

样例输出

4

样例解释

image.png

到第 4 年,无法从上面到达下面。

第3年可以从上面走到下面,我们可以想象输入是一个连接着上方和下方的桥。

image.png

第0年,我们可以这么走:

image.png
这题其实非常简单
但问题就是–如何不TLE
看过数据范围的都知道
.这题的数据十分危险 稍有不慎,dfs便会TLE!!!
本人不太会bfs
所以我们可以得出一个结论--------爆搜包T的!
but 让我们想想 我们是不是可以用一个二分来判断是否在第一行,
再进行dfs,这样遍历次数就会少很多,好像不会T了!
那就试试吧!!!!


真棒!又T了!! :sob: :sob:
那怎么办?如何再减少遍历次数?
这时我们都会想到一种算法没错,就是二分!

while(l<r){
			mid=(l+r)>>1;
			if(wh(mid)){
				l=mid+1;
			}else{
				r=mid;
			}
		}

我们用mid表示第几年,若能走通就加一,不能走通就将右端点左移,这样就又可以减少许多次!
再来一次!

so easy :grinning: :grinning:

2 个赞

Hi~ o( ̄▽ ̄)ブ

2 个赞

666

1 个赞