无向图三元环计数

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)\)

posted @ 2020-11-06 15:32  BILL666  阅读(238)  评论(0)    收藏  举报