zoukankan      html  css  js  c++  java
  • 三元环计数

    也许更好的阅读体验

    问题描述

    给一张(n)个点,(m)条边的简单无向图,求解有多少个三元环
    三元环:一个三元组(left(i,j,k ight))表示三个点,要求存在边(left(i,j ight),left(i,k ight),left(j,k ight))


    解决方法

    定义点的大小

    我们先把每个点(i)定义一个双关键字(left(deg_i,id_i ight)),其中(deg_i,id_i)分别表示(i)点的度数与编号,这样每个点就有了严格的大小关系

    转为有向图

    然后我们将这张无向图转变为有向图:把所有的边(left(i,j ight))改为由关键字大的点向关键字小的点连边,这样我们就可以得到一张有向无环图

    找环

    找环分为三步

    • 枚举一个点(i),将所有出边所连接的点标记为(i)
    • 枚举一个由(i)连出的点(j)
    • 枚举所有由(j)连出的点(k),若(k)有标记了且该标记为(i),就表明找到了一个三元环

    这样做就保证了每个环只会被(i)所找到
    时间复杂度,最高为(Oleft(msqrt{m} ight))

    如有哪里讲得不是很明白或是有错误,欢迎指正
    如您喜欢的话不妨点个赞收藏一下吧

  • 相关阅读:
    [POJ3635]Full Tank? 题解
    洪水题解
    [HNOI2009]最小圈 题解
    Grazing on the Run 题解
    [BZOJ4237]稻草人 题解
    [POJ3783]Balls 题解
    [POI2005]Bank notes 题解
    字符串题解
    pyinstaller利用spec文件打包的使用模板
    Pycharm2020 永久激活
  • 原文地址:https://www.cnblogs.com/Morning-Glory/p/11329490.html
Copyright © 2011-2022 走看看