三/四元环

三/四元环计数

对于一个 nn 个点,mm 条边的无向图

我们可以在 O(mm)O(m\sqrt m) 的复杂度内计算出该图的三/四元环个数

三元环

dxd_x 表示原图中点 xx 的度数

考虑将无向图转为有向图

对于一边 (u,v)(u,v)u<vu<v

  1. dudvd_u\geq d_vuvu\to v
  2. du<dvd_u<d_vvuv\to u

我们可以证明连出的新图为一个有向无环图

若存在环 (a0,a1,...,ak)(a_0,a_1,...,a_k)

da0da1da2...dakda0d_{a_0}\geq d_{a_1}\geq d_{a_2}...\geq d_{a_k}\geq d_{a_0}

da0=da1=...=dakd_{a_0}=d_{a_1}=...=d_{a_k}

所以 a0<a1<a2<...<ak<a0a_0<a_1<a_2<...<a_k<a_0,矛盾

显然原图中的三元环 (u,v,w)(u,v,w) 在新图中的表现形式一定为 uv,uw,vwu\to v,u\to w,v\to w

我们考虑在 uu 点处计数

枚举 uu,给 uu 在新图上可一步到达的点打标记,再枚举点 vv,枚举 ww 判断是否被 uu 标记过

计数即可

考虑将枚举 ww 的复杂度记在边 uvu\to v 上,为 outv:vout_v:v的出度

总复杂度为(u,v)Eoutv+uoutu\sum_{(u,v)\in E}out_v+\sum_{u}out_u

  1. outvmout_v\leq \sqrt m ,复杂度 O(mm)O(m\sqrt m)
  2. outv>mout_v>\sqrt m,又 outu>mout_u>\sqrt m,总共仅有 mm 条边,这样的 (u,v)(u,v) 仅有 O(m)O(\sqrt m) 个,复杂度 O(mm)O(m\sqrt m)

四元环

同样考虑按三元环的方法建出新图

显然一个四元环在新图中至少有一个度数为2的点,至多2个这样的点,我们保证在度数最大的那个点计数即可

考虑一个四元环 (u,v,w,x)(u,v,w,x),我们分成 uvw,uxwu-v\to w,u-x\to w 两条链计算

枚举 uu ,枚举原图的边以枚举 vv ,再枚举 w,(du>dw or u<w)w,(d_u>d_w \space or \space u<w)

答案算上 ww 点上的标记,并在 ww 上多打一个来自 vv 的tag

复杂度为 O((v,w)Eedgev+winw)O(\sum_{(v,w)\in E}edge_v+\sum_{w}in_w)

类似讨论,可得到复杂度为 O(mm)O(m\sqrt m)