-
三元环
题目链接-
题目:
给定一个 n n n个结点 m m m条边的无向图,问有多少个三元环。
( 1 ≤ n ≤ 1 0 5 , 1 ≤ m ≤ 2 × 1 0 5 ) (1 \le n \le 10^5,1 \le m \le 2 \times 10^5) (1≤n≤105,1≤m≤2×105) -
题解:
使用根号分治的思想。
基于原图的连边,将度数较小的点向度数较大的点连边,如果度数相同,结点编号小的向结点编号大的连边,形成一个新的有向图,显然这个有向图是一个 D A G DAG DAG(因为从一个结点出发到达的点要么度数比它大,要么结点编号比它大,所以不会回到自己)。那么原图的三元环在新的有向图上一定可以由形如 < u , v > , < u , w > , < v , w > <u,v>,<u,w>,<v,w> <u,v>,<u,w>,<v,w>这样的三条边构成。先枚举点 u u u,再枚举点 u u u的出边 < u , v > <u,v> <u,v>,然后枚举点 v v v的出边 < v , w > <v,w> <v,w>,判断点 w w w是不是点 u u u的出点,如果是那么就形成了一个三元环,可以在枚举点 u u u后先将点 u u u的所有出点打上标记,这样就可以 O ( 1 ) O(1) O(1)判定点 w w w是不是点 u u u的出点了。
上述算法的复杂度是 O ( m m ) O(m \sqrt m) O(mm)的。首先枚举 u u u再枚举 u u u的出边的过程相当于枚举了新图所有的边,数量为
-
三、四元环计数
最新推荐文章于 2023-05-03 16:13:23 发布