求助一道题目

学术版

SUNCHAOYI @ 2020-06-28 21:06:41

题目描述

有⼀个 n \times n 的棋盘,每个格⼦有个坐标(x,y)(1 \le x,y \le n) 每个格⼦被染成了黑白两种颜⾊之⼀。请你计算棋盘中⿊⾊联通块个数。 两个格⼦联通当且仅当他们有⼀条相同的边。

输入

输⼊有 n + 1 ⾏。第⼀⾏有⼀个整数 n 表⽰棋盘的⻓和宽。

接下来 n ⾏,每⾏有⼀个字符串。第 i ⾏的字符串描述了棋盘第 i ⾏⿊⾊区域的信息。

每个区域都有⼀个数字 j,表⽰棋盘上 (i,j) 左边的格⼦是⿊⾊。或者包含两个整数 j,k,在字符串中表⽰为 j-k,表⽰第 i ⾏中 [j,k] 列的部分都是⿊⾊

这样描述的区域个数不会超过 10^6 个。

每⼀⾏字符串描述的两个区域之间会⽤ , 隔开,如果是最后⼀个区域,会在后⾯加上⼀个分号 ;。特殊的,如果某⼀⾏全是⽩⾊格⼦,那么描述这⾏的字符串只是 ;

举例说明,若棋盘⼤⼩为 5,某⼀⾏字符串信息为 2,4-5;,它描述的棋盘信息为:⽩ ⿊ ⽩ ⿊ ⿊

输出

输出包括若⼲⾏,每⾏有两个整数 sns 表⽰联通块的⼤⼩,n 表⽰所有联通块中,⼤⼩恰好为 s 的联通块个数。

请按照联通块的⼤⼩,从⼤到⼩顺序输出。

数据范围

对于 100\% 的数据,1 \le n \le 3 \times 10^4

样例输入

8
2,4-5; 
5-6; 
2-3,6; 
6-7; 
;
2-4; 
2,4,6-7; 
2-3,6-7;

样例输出

7 2 
4 1 
2 1 
1 1

请问各位大佬有什么做法可以不 MLE 呢?(本蒟蒻一下子想不出来了)


by liujiageng @ 2020-06-28 21:13:52

应该只存黑色区域的坐标就行


by Mevinsp @ 2020-06-28 21:14:28

应该只存黑色区域的坐标


by Mevinsp @ 2020-06-28 21:14:36

???


by liujiageng @ 2020-06-28 21:14:51

???


by SUNCHAOYI @ 2020-06-28 21:15:25

怎么个存法?


by Mevinsp @ 2020-06-28 21:16:30

emmm


by liujiageng @ 2020-06-28 21:17:13

俩一维数组或结构体数组


by Mevinsp @ 2020-06-28 21:18:07

我觉得状压DP应该也行吧


by psoet @ 2020-06-28 21:33:54

用数组存坐标和编号,排序两次分别按x,y坐标为第一关键字。每次排序后扫一次将编号并查集合并。@SUNCHAOYI


by 小粉兔 @ 2020-06-28 21:42:18

相邻两行有相交的黑色连续段之间连边,然后直接 DFS


| 下一页