【无向图三元环计数】
定义一个有向图 :把 中每条边改成从度数小的点指向度数大的点 的有向边。
性质: 中每个点的出度 。
证明:若 的出度 ,则显然 在原图中的度数 。所以 指向的至少 个点的度数,也都 。(因为是度数小指向度数大的)
这 个点,每个点的度数都大于 ,则总边数显然 。
这个性质有什么用呢?
推论:(在 中)枚举点 ,再枚举 的后继 ,再枚举 的后继 的复杂度是 的。
证明:可能有一种不准确的估计: 点是 枚举的,枚举 的后继 ,再枚举一个又乘 ,总复杂度是 的。但实际上,枚举 和 的后继,相当于枚举了所有边的起点,总复杂度不是 而是 的。所以总复杂度是 。
由此可以设计出我们的算法:
枚举点 ,枚举 的后继 ,将所有 打上标记;然后枚举所有 的后继 ,若 有标记,
提示:这个算法不只是求出了数量,它直接找到了所有三元组。所以如果每条边有边权,求所有三元环边权之和也是可以的。
【有向图三元环计数】
其实我们可以暴力一点。
记 为一个无向图,是 中所有边去掉了方向。
然后对 找出所有三元环,然后在 里面是否也构成三元环。
应用:Counting Stars
题意:定义一个 star 子图为:四个点五条边 的子图。求 中有多少个 star 子图。
对于每条边 ,统计 : 属于多少个三元环。则每条边的答案贡献就是 。
怎么算 ?枚举所有三元环,然后给三条边的 各 即可。
【无向图四元环计数】
无向图定向后有三种可能情况。分别计数。

①:,先枚举 , 对于每个 ,求出 : 的数量。 的数量就是 。
②:,还有 。先枚举 ,对于每个 ,求出两个值 : 的个数,: 的个数。则 的答案就是 。
很好求,在 ① 里做过了;而对于 ,我们先枚举 ,再枚举 的前驱,再枚举 前驱的后继,一共 。
注意:这里不能先枚举 ,因为 有三层,复杂度会爆。
③:。先枚举 , 对于每个 求出 : 的 个数。则 的答案就是 。
求 也很简单,和 ② 中 的求法一样。。
注意这里不能枚举 然后求 ,因为枚举 后继的前驱 复杂度就不对了。
三种情况都可以 求出来,总复杂度还是 。
注意:统计总数可以 ,但是枚举所有四元环出来不是 的。
应用:CF1468M
题意:给定若干个集合,两个集合若有至少两个相同元素,则相似。找出一对相似集合,或说明无解。
把每个集合抽象为一个点,每个元素也抽象为一个点。一个集合向其包含的所有元素连一条无向边。于是出现一个二分图。
答案就是在这个二分图里面四元环计数。
【其他图计数】
欧拉图计数
题意:求欧拉子图个数。
欧拉图:每个点度数为偶数。
不妨假设图是连通图。否则每个连通分量求一下然后相乘即可。
结论:。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!