题意:给出一个图(N个点,M条边),让你把此图分成尽可能多的集合,满足任意不在同一集合的点之间都有边相连。
很明显最多的集合数就是联通块的数量,所以我们只要求出联通块的数量以及每个联通块的大小就行了。我第一个想到的做法是$n^2$建出反图,然后bfs。然后看到n的范围(2<=n<=100 000)果断放弃。然后就放着了。今天又碰到,在网上查了查题解,发现其实这道题就是个链表优化的暴力。。。。把n个点放到一个链表里,每次取表头,把不和它相连的点和它自己在链表里删掉并加进一个队列进行bfs,重复这个过程,直到链表为空,我们就得到了联通块的个数,每个联通块的大小可以在bfs时求得。
|
|