题目描述
有一个r*c的地图,把左边界和右边界粘起来使得形成一个圆柱,现在要不断地挖去其中的格子,要求任何时候都存在一条从最上方到最下方的路径(四联通),如果某次操作不满足要求则不做,问最后有多少次操作是成功的。
输入
第一行三个数r,c,n,空格分隔。
接下来n行,每行两个数x,y,表示要删除的格子在x行y列。
输出
– 只一行,一个数,表示成功的删除操作的数量。
样例输入
3 4 9
2 2
3 2
2 3
3 4
3 1
1 3
2 1
1 1
1 4
样例输出
6
提示
30%的数据,n<=5000。
100%的数据,r,c<=3000,n<=300000。
算法
- 破环成链 将图变为 r*2c
- 对于每一次挖格子 将他与周围8格内所有被挖的格子一起统计
- 使用并查集判断是否有一个联通块覆盖2*2c的矩形
代码
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <string>
#include <cmath>
#define MAXN 3005
using