三、四元环计数

  • 三元环
    题目链接
    • 题目:
      给定一个 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) (1n105,1m2×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的出边的过程相当于枚举了新图所有的边,数量为
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值