三元环

Problem

给出 n n n个点 m m m条边的无向图,找出图中所有长度为 3 3 3的环。

Solution

根据原图计算每个点的度数,然按以下规则将图转为有向图:
对于原图中一条边,如果两个端点的度数不相等,则度数大的点指向度数小的点。否则,标号大的点指向标号小的点。
将图转换成有向图后,枚举每个点 a a a,枚举 a a a指向的每个点 b b b,枚举 b b b指向的每个点 c c c,判断点 a a a c c c之间是否有边,如果有,则构成一个三元环,否则不构成三元环。

正确性证明

首先,若将图中的结点按度数为第一关键字,标号为第二关键字排序,则总是小的结点向大的结点连边,故图为一个有向无环图。
其次,对于原图中的一个三元环,也可以按上述方式排序,设排序后三元环的点按顺序排列依次为 a , b , c a,b,c a,b,c,则在有向无环图中其对应有唯一一条路径 a ⇒ b ⇒ c a\Rightarrow b\Rightarrow c abc,从而每个三元环都会被枚举到且仅被枚举一次。

时间复杂度

对于一个度数大于 m \sqrt{m} m 的点,它指向的点最多 m \sqrt{m} m 个,这样的点最多 m \sqrt{m} m 个,故当第二个点度数大于 m \sqrt{m} m 时枚,举的三元组数量不多于 m m m\sqrt{m} mm 个。
对于度数小于 m \sqrt{m} m 的点,显然当它们都在 m \sqrt{m} m 个点的完全图中的时候三元环数量最多,而这样的图中的三元组数量也不多于 m m m\sqrt{m} mm 个。
故以上算法的时间复杂度为 O ( m m ) O(m\sqrt{m}) O(mm )

[SDOI2018]旧试题

∑ i = 1 A ∑ j = 1 B ∑ k = 1 C d ( i j k ) \sum_{i=1}^A\sum_{j=1}^B\sum_{k=1}^Cd(ijk) i=1Aj=1Bk=1Cd(ijk) d ( i j k ) d(ijk) d(ijk) i ∗ j ∗ k i*j*k ijk的因子数。
I ( x ) = [ x = 1 ] , ( ∗ ) = ⌊ A d 1 ⌋ ⌊ B d 2 ⌋ ⌊ C d 3 ⌋ , ( ∗ ∗ ) = u ( x ) u ( y ) u ( z ) I(x)=[x=1],(*)=\lfloor\frac{A}{d1}\rfloor\lfloor\frac{B}{d2}\rfloor\lfloor\frac{C}{d3}\rfloor,(**)=u(x)u(y)u(z) I(x)=[x=1],()=d1Ad2Bd3C,()=u(x)u(y)u(z)
∑ i = 1 A ∑ j = 1 B ∑ k = 1 C d ( i j k ) = ∑ i = 1 A ∑ d 1 ∣ i ∑ j = 1 B ∑ d 2 ∣ j ∑ k = 1 C ∑ d 3 ∣ k I ( ( d 1 , d 2 ) ) I ( ( d 2 , d 3 ) ) I ( ( d 1 , d 3 ) ) = ∑ d 1 = 1 A ∑ d 2 = 1 B ∑ d 3 = 1 C ⌊ A d 1 ⌋ ⌊ B d 2 ⌋ ⌊ C d 3 ⌋ I ( ( d 1 , d 2 ) ) I ( ( d 2 , d 3 ) ) I ( ( d 1 , d 3 ) ) = ∑ d 1 = 1 A ∑ d 2 = 1 B ∑ d 3 = 1 C ( ∗ ) ∑ x ∣ ( d 1 , d 2 ) u ( x ) ∑ y ∣ ( d 2 , d 3 ) u ( y ) ∑ z ∣ ( d 1 , d 3 ) u ( z ) = ∑ x = 1 m i n ( A , B ) ∑ y = 1 m i n ( B , C ) ∑ z = 1 m i n ( A , C ) u ( x ) u ( y ) u ( z ) ∑ x ∣ d 1 , z ∣ d 1 ⌊ A d 1 ⌋ ∑ x ∣ d 2 , y ∣ d 2 ⌊ B d 2 ⌋ ∑ y ∣ d 3 , z ∣ d 3 ⌊ C d 3 ⌋ = ∑ x = 1 m i n ( A , B ) ∑ y = 1 m i n ( B , C ) ∑ z = 1 m i n ( A , C ) u ( x ) u ( y ) u ( z ) ∑ l c m ( x , z ) ∣ d 1 ⌊ A d 1 ⌋ ∑ l c m ( x , y ) ∣ d 2 ⌊ B d 2 ⌋ ∑ l c m ( y , z ) ∣ d 3 ⌊ C d 3 ⌋ = ∑ x = 1 m ( A , B ) ∑ y = 1 m ( B , C ) ∑ z = 1 m ( A , C ) ( ∗ ∗ ) f ( [ x , z ] , A ) f ( [ x , y ] , B ) f ( [ y , z ] , C ) \sum_{i=1}^A\sum_{j=1}^B\sum_{k=1}^Cd(ijk)=\\\sum_{i=1}^A\sum_{d1|i}\sum_{j=1}^B\sum_{d2|j}\sum_{k=1}^C\sum_{d3|k}I((d1,d2))I((d2,d3))I((d1,d3))=\\\sum_{d1=1}^A\sum_{d2=1}^B\sum_{d3=1}^C\lfloor\frac{A}{d1}\rfloor\lfloor\frac{B}{d2}\rfloor\lfloor\frac{C}{d3}\rfloor I((d1,d2))I((d2,d3))I((d1,d3))\\=\sum_{d1=1}^A\sum_{d2=1}^B\sum_{d3=1}^C(*)\sum_{x|(d1,d2)}u(x)\sum_{y|(d2,d3)}u(y)\sum_{z|(d1,d3)}u(z)\\= \sum_{x=1}^{min(A,B)}\sum_{y=1}^{min(B,C)}\sum_{z=1}^{min(A,C)}u(x)u(y)u(z)\\\sum_{x|d1,z|d1}\lfloor\frac{A}{d1}\rfloor\sum_{x|d2,y|d2}\lfloor\frac{B}{d2}\rfloor\sum_{y|d3,z|d3}\lfloor\frac{C}{d3}\rfloor\\= \sum_{x=1}^{min(A,B)}\sum_{y=1}^{min(B,C)}\sum_{z=1}^{min(A,C)}u(x)u(y)u(z)\\\sum_{lcm(x,z)|d1}\lfloor\frac{A}{d1}\rfloor\sum_{lcm(x,y)|d2}\lfloor\frac{B}{d2}\rfloor\sum_{lcm(y,z)|d3}\lfloor\frac{C}{d3}\rfloor\\= \sum_{x=1}^{m(A,B)}\sum_{y=1}^{m(B,C)}\sum_{z=1}^{m(A,C)}(**)f([x,z],A)f([x,y],B)f([y,z],C) i=1Aj=1Bk=1Cd(ijk)=i=1Ad1ij=1Bd2jk=1Cd3kI((d1,d2))I((d2,d3))I((d1,d3))=d1=1Ad2=1Bd3=1Cd1Ad2Bd3CI((d1,d2))I((d2,d3))I((d1,d3))=d1=1Ad2=1Bd3=1C()x(d1,d2)u(x)y(d2,d3)u(y)z(d1,d3)u(z)=x=1min(A,B)y=1min(B,C)z=1min(A,C)u(x)u(y)u(z)xd1,zd1d1Axd2,yd2d2Byd3,zd3d3C=x=1min(A,B)y=1min(B,C)z=1min(A,C)u(x)u(y)u(z)lcm(x,z)d1d1Alcm(x,y)d2d2Blcm(y,z)d3d3C=x=1m(A,B)y=1m(B,C)z=1m(A,C)()f([x,z],A)f([x,y],B)f([y,z],C)
其中 f ( n , m ) = ∑ i = 1 n ∗ i ≤ m ⌊ m n ∗ i ⌋ f(n,m)=\sum\limits_{i=1}^{n*i\le m}\lfloor\frac{m}{n*i}\rfloor f(n,m)=i=1nimnim,可以预处理, [ x , y ] = l c m ( x , y ) [x,y]=lcm(x,y) [x,y]=lcm(x,y)
特别地,当 n > m n>m n>m f ( n , m ) = 0 f(n,m)=0 f(n,m)=0
故对于枚举的 x , y , z x,y,z x,y,z,需要满足 [ x , z ] ≤ A , [ x , y ] ≤ B , [ y , z ] ≤ C [x,z]\le A,[x,y]\le B,[y,z]\le C [x,z]A,[x,y]B,[y,z]C u ( x ) u ( y ) u ( z ) ≠ 0 u(x)u(y)u(z)\neq 0 u(x)u(y)u(z)=0才对答案有贡献。
建一张 n ( n = m a x ( A , B , C ) ) n(n=max(A,B,C)) n(n=max(A,B,C))个点的图,对于点 a , b a,b a,b,如果 u ( a ) u ( b ) ≠ 0 u(a)u(b)\neq 0 u(a)u(b)=0则在点 a a a和点 b b b之间连一条边权为 l c m ( a , b ) lcm(a,b) lcm(a,b)的边,问题转换对于这张图中所有的三元环计算上式。采用上述三元环算法即可。
关于建图:枚举 l c m lcm lcm,根据莫比乌斯函数的性质,如果 u ( l c m ) = 0 u(lcm)=0 u(lcm)=0则略过,否则枚举 l c m lcm lcm的因子连边即可(根据实测,在 A , B , C ≤ 1 e 5 A,B,C\le1e5 A,B,C1e5的情况下边数在 7 e 5 7e5 7e5左右)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值