给定一张无向图
G=(V,E),求其三元环个数。
考虑给这张图定向。先对
G 中的节点排序,度数小的排在度数大的前面,如果度数相同则按编号排序,即
degi<degj∨(degi=degj∧i<j)⟹rki<rkj。
考虑强制
rki 小的向
rki 大的连边,令新图为
G′=(V′,E′),可以发现,原图中的三元环
(A,B,C)(钦定
rkA<rkB<rkC)在
G′ 中只有一种可能:
A→B,A→C,B→C。
然后这个直接枚举
A→B,B→C 看是否存在
A→C 就可以。复杂度
O(∣E∣∣E∣)。
接下来是时间复杂度证明。
显然判定可以做到
O(1),而判定的次数为
(u,v)∈E′∑w∑[(v,w)∈E′]。
令
outi 表示
G′ 中点
i 的出度。显然左边那一部分枚举次数是
O(∣E∣) 的,只需要证明
outv 是根号级别的就行。
定义
Su 为
v∣(u,v)∈E′。显然根据
G′ 连边的方式,有
∀i∈Su,outu≤degu≤degi。
根据度数的性质
outu⋅outu≤i∈Su∑degi≤2∣E∣。最左边是
degi 都取到
outu 的情况。
则
outu≤2∣E∣。
板子题 P1989。
接下来是求四元环个数。
和前面一样,我们对原图定向,构造
G′。此时原图中四元环
(A,B,C,D)(同样钦定
rkA<rkB<rkC<rkD)在
G′ 中有三种可能:
我们令
fA 表示
A→B→C 的路径数量,
gA 表示
A←B→C 的数量。
显然
fA 是可以
O(∣E∣∣E∣) 求的。
对于
gA,考虑建立
G′ 的反图
G′′,枚举
(u,v)∣(u,v)∈E′′,和
(v,w)∣(v,w)∈E′ 即可。复杂度同样
O(∣E∣∣E∣)。因为对于
v,枚举
(v,w) 为
outv,不超过
2∣E∣,枚举
(u,v)∈E′′ 是
O(∣E∣) 的。
对于(1),方案数为
B∑fB⋅gB,对于(2),方案数为
A∑(2fA),对于(3),方案数为
2C∑(2gC)。这里除以
2 是因为选择
C 和选择
D 都会计算一遍。
板子题 LibreOJ P191.
P9850 [ICPC 2021 Nanjing R] Ancient Magic Circle in Teyvat
gugugu.