三元环和四元环

三元环

判断任意无向图是否存在三元环,或者三元环计数问题,有着极简的解法。

首先我们给无向图定向:对于度数不同一对节点,按度数定向;度数相同,按节点编号定向。其实具体怎么做都无所谓,只要能连成一个有向无环图即可。

枚举一个节点 \(u\) ,对于它的每一个后继节点 \(v\) 打一个标记,然后再遍历 \(v\) 的后继节点,如果遍历到一个打过标记的节点,也就找到了一个三元环。

这就是一个暴力做法,现在我们分析它的复杂度。对于一条从 \(u\)\(v\) 的边,贡献为 \(v\) 的出度,复杂度为 $ \sum_{ e: u \to v } out_v $ 。根号分治一下,对于出度不超过 $ \sqrt M $ 的点,贡献为 $ M \sqrt M $ ;对于出度大于 $ \sqrt M $ 的点,由于连向它的点度数都不低于它,所以只会贡献 $ \sqrt M $ 次。

所以总的复杂度为 $ O( M \sqrt M ) $ 。

四元环

沿用上述对边定向的思路。

注意到四元环由两条链拼起来,如果直接按三元环做,可能有两种情况:两条链长都为2,或一条链长3,另一条链长1。

所以在枚举 \(u\) 的后继时使用原图的边可以很好地解决这个问题。

具体来说,枚举起始节点 \(u\) ,枚举 \(u\) 的后继 \(v\) (这里遍历的是原图的边),再枚举 \(v\) 的后继 \(k\) (这里遍历的是定向后的图),对每个 \(k\) 记录遍历到的次数,统计答案即可。

按照类似三元环的复杂度分析,四元环也是 $ O( M \sqrt M ) $ 的。

简直太厉害啦!

例题

P1989 无向图三元环计数 ,这就是真模板了。

posted @ 2025-07-01 20:00  Abnormal123  阅读(29)  评论(0)    收藏  举报