连接组件数

时间:2018-10-17 14:27:57

标签: algorithm data-structures graph-theory

我们有n个节点,与每个节点关联的对应值由数组A[]表示。对于i的任何j(1<=i,j<=n and i!=j)来说,如果GCD(A[i],A[j])==1都存在一条黑白边。我们必须在由它们形成的图中找到连接的组件的数量。

1 ≤ N ≤ 2⋅10^5

1 ≤ A[i] ≤ 2⋅10^5

时间为 0.5 秒。

我正在通过使用O(n^2 log n)时间中设置的不相交来解决此问题,但超出了时间限制。

我还可以在A[i]的时间内找到所有O(nlogn)的主要因素,但是无法利用它来寻找解决方案。

1 个答案:

答案 0 :(得分:1)

如您所写,我们可以在O(nlogn)中构建二部图,其中左部分包含数组值,右部分包含质数。

然后,对于左侧部分的每个顶点,我们应该找到距其距离2(在图中)的顶点(左侧部分),并与所有其余顶点(不交集集合结构)建立连接。

第二阶段的最坏情况(使用深度为2的BFS)也许是二次方的,但在实践中似乎可能很快。