白令海峡!!!题目传送门!
我食言了,并没有先写 ”小埋的最大差值“
但我至少写了!
请看题目
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
样例解释
到第 4 年,无法从上面到达下面。
第3年可以从上面走到下面,我们可以想象输入是一个连接着上方和下方的桥。
第0年,我们可以这么走:
这题其实非常简单
但问题就是–如何不TLE
看过数据范围的都知道
.这题的数据十分危险 稍有不慎,dfs便会TLE!!!
本人不太会bfs
所以我们可以得出一个结论--------爆搜包T的!
but 让我们想想 我们是不是可以用一个二分来判断是否在第一行,
再进行dfs,这样遍历次数就会少很多,好像不会T了!
那就试试吧!!!!
真棒!又T了!!
那怎么办?如何再减少遍历次数?
这时我们都会想到一种算法没错,就是二分!
while(l<r){
mid=(l+r)>>1;
if(wh(mid)){
l=mid+1;
}else{
r=mid;
}
}
我们用mid表示第几年,若能走通就加一,不能走通就将右端点左移,这样就又可以减少许多次!
再来一次!
so easy