题目名称 360. 双面棋盘
输入输出 dface.in/out
难度等级 ★★★☆
时间限制 1000 ms (1 s)
内存限制 128 MiB
测试数据 10
题目来源 Gravatarcqw 于2009-07-13加入
开放分组 全部用户
提交状态
分类标签
动态图
分享题解
通过:10, 提交:37, 通过率:27.03%
GravatarManchery 100 0.157 s 2.00 MiB C++
Gravatar小一米 100 0.191 s 2.23 MiB C++
Gravatarlcomyn 100 0.506 s 54.46 MiB C++
Gravatarhzz 100 0.570 s 25.78 MiB C++
GravatarFoolMike 100 0.852 s 8.49 MiB C++
GravatarSliverN 100 1.265 s 3.69 MiB C++
Gravatarlcomyn 100 1.608 s 15.12 MiB C++
GravatarCreationAugust 100 1.678 s 15.15 MiB C++
Gravatar小一米 100 2.816 s 1.71 MiB C++
Gravatar小一米 100 3.127 s 1.71 MiB C++
本题关联比赛
20090714
关于 双面棋盘 的近10条评论(全部评论)
路过的垃圾Mike到现在也只会分治并查集……
GravatarFoolMike
2017-08-22 20:41 3楼
话说求问萌帝为什么我在COGS之前的账号被删除掉了T_T
只不过一小段时间没有用而已..
@cstdio
GravatarCreationAugust
2016-01-21 19:32 2楼
LCT维护一下整个图的以删除时间做关键字的最大生成树就行了
GravatarCreationAugust
2016-01-21 19:32 1楼

360. 双面棋盘

★★★☆   输入文件:dface.in   输出文件:dface.out   简单对比
时间限制:1 s   内存限制:128 MiB

【问题描述】

佳佳有一个 n n 列的黑白棋盘,每个格子都有两面,一面白色,一面黑色。佳佳把棋盘平放在桌子上,因此每个格子恰好一面朝上,如下图所示:

 

 

1

 

 

 

 

1

1

1

 

1

 

 

 

1

 

 

1

 

 

1

 

 

 

 

 

我们把每行从上到下编号为 1 , 2 , 3 ,……, n ,各列从左到右编号为 1 , 2 , 3 ,……, n ,则每个格子可以用棋盘坐标 ( x , y ) 表示。在上图中,有 8 个格子黑色朝上,另外 17 个格子白色朝上。

如果两个同色格子有一条公共边,我们称这两个同色格子属于同一个连通块。上图共有 5 个黑色连通块和 3 个白色连通块。

佳佳可以每分钟将一个格子翻转(即白色变成黑色,黑色变成白色),然后计算当前有多少个黑色连通块和白色连通块,你能算得更快吗?

 

【 输入文件 】 dface.in

输入文件的第一行包含一个正整数 n ,为格子的边长。以下 n 行每行 n 个整数,非 0 即 1 ,表示初始状态。 0 表示白色, 1 表示黑色。下一行包含一个整数 m ,表示操作的数目。以下 m 行每行两个整数 x , y (1 ≤ x , y n ) ,表示把坐标为 ( x , y ) 的格子翻转。

 

【 输出文件 】 dface.out

输出文件包含 m 行,每行对应一个操作。该行包括两个整数 b , w ,表示黑色区域和白色区域数目。

 

【 约定 】

•  1 ≤ n ≤ 200

•  1 ≤ m ≤ 10,000

 

【 样例输入 】 dface.in

5
0 1 0 0 0
0 1 1 1 0
1 0 0 0 1
0 0 1 0 0
1 0 0 0 0
2
3 2
2 3
 

【 样例输出 】 dface.out

4 3
5 2
 

【 样例说明 】

翻转 (3, 2) 之后,棋盘变为:

 

 

1

 

 

 

 

1

1

1

 

1

1

 

 

1

 

 

1

 

 

1

 

 

 

 

有 4 个黑色区域和 3 个白色区域

翻转 (2, 3) 之后,棋盘变为:

 

 

1

 

 

 

 

1

 

1

 

1

1

 

 

1

 

 

1

 

 

1

 

 

 

 

 

有 5 个黑色区域和 2 个白色区域