#4373. 使用六边形网格(Do use hexagon grid)

使用六边形网格(Do use hexagon grid)

题目描述

我们有一个如下所示的无限大的六边形网格。最初,所有格子都是白色的。

一个六边形格子可以用两个整数 iijj 表示为 (i,j)(i,j)
格子 (i,j)(i,j) 与以下 6 个格子相邻:
(i1,j1)(i-1,j-1)
(i1,j)(i-1,j)
(i,j1)(i,j-1)
(i,j+1)(i,j+1)
(i+1,j)(i+1,j)
(i+1,j+1)(i+1,j+1)
小高将 NN 个格子 (X1,Y1),(X2,Y2),,(XN,YN)(X_1,Y_1),(X_2,Y_2),\cdots,(X_N,Y_N) 涂成黑色。
请求出黑色格子形成的连通分量的数量。
这里,如果两个黑色格子之间可以通过若干个相邻的黑色格子移动到达,则认为这两个黑色格子属于同一个连通分量。

输入格式

输入按以下格式从标准输入给出:
NN
X1X_1 Y1Y_1
X2X_2 Y2Y_2
\vdots
XNX_N YNY_N

输出格式

输出所求答案。

样例

6
-1 -1
0 1
0 2
1 0
1 2
2 0
3
4
5 0
4 1
-3 -4
-2 -5
4
5
2 1
2 -1
1 0
3 1
1 -1
1

样例1解释

小高将格子涂黑后,网格如下图所示。

黑色格子形成以下三个连通分量:
(-1,-1)
(1,0),(2,0)
(0,1),(0,2),(1,2)

数据范围

输入中的所有值都是整数
1N10001 \le N \le 1000
Xi,Yi1000|X_i|,|Y_i| \le 1000
(Xi,Yi)(X_i,Y_i) 两两不同。

来源

  • AtCoder ABC269D