Latex 语言可能不是很好,请见谅。
题目大意:
有 nnn 个数 aia_iai ,aia_iai 和 aja_jaj 可以联系当且仅当 ∣ai−aj∣=1|a_i-a_j|=1∣ai −aj ∣=1 或他们可以按此联系方式通过若干”中间人“互相联系。
求能互相联系的同学集合的数量减 111。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
发现一个能互相联系的同学集合一定排序后一定形如 {\{{若干个 xxx,若干个 x+1x+1x+1,若干个 x+2x+2x+2...... }\}}。
然后这个集合有多少个 xxx 其实不重要,只需要知道这个集合里面有这个数就行了。
又看到 ai≤2×105a_i\le 2\times 10^5ai ≤2×105,所以搞个标记数组标记一下。然后依次找每个 aia_iai 有没有被标记过,没有的话就让计数 +1+1+1 并进行搜索拓展。对于每个带拓展的 xxx,搜索 x−1x-1x−1 和 x+1x+1x+1 有没有被标记,没有就把他标记上,然后继续拓展。以此类推。答案即为计数减 111。
坑点解析:搜索刚开始的时候是不能标记 aia_iai 被搜索过的,不然会在第二组测试数据这种被卡掉。