我们有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)
的主要因素,但是无法利用它来寻找解决方案。
答案 0 :(得分:1)
如您所写,我们可以在O(nlogn)中构建二部图,其中左部分包含数组值,右部分包含质数。
然后,对于左侧部分的每个顶点,我们应该找到距其距离2(在图中)的顶点(左侧部分),并与所有其余顶点(不交集集合结构)建立连接。
第二阶段的最坏情况(使用深度为2的BFS)也许是二次方的,但在实践中似乎可能很快。