无向图三元环计数
description:
给出\(N\)个点\(M\)条边的无向图,求其中三元环的个数
data range:
\(N,M\le 10^5\)
solution:
对于每条无向边,我们进行定向,由度数大的点连向度数小的点
记\(S_u\)表示定向后\(u\)可以直接到达的点的集合
首先对于所有\(v\in S_u\)打上标记
而后枚举\(v\in S_u\),再枚举\(w\in S_v\),如果\(w\in S_u\),那么就枚举到一个三元环
可以发现每个三元环只会被枚举到一次
可以证明其复杂度为\(O(n\sqrt n)\),证明如下:
复杂度来源于两个部分:每个点的出边和每个点出边到达的点的出边
对于第一部分,显然复杂度为\(O(n+m)\)
对于第二部分,
如果当前点的出度小于\(\sqrt m\),至多有\(n\)个点连向它,因此复杂度为\(O(n\sqrt m)\)
如果当前点的出度大于\(\sqrt m\)(至多为\(m\)),指向它的点至多只有\(\frac{m}{\sqrt m}=\sqrt m\),因此复杂度为\(O(m\sqrt m)\)
由于\(n,m\)同阶,因此总复杂度为\(O(n\sqrt n)\)
NO PAIN NO GAIN

浙公网安备 33010602011771号