zoukankan      html  css  js  c++  java
  • 【技巧】三元环计数

    About


    其实这篇 blog 是因为自己每天一篇 blog 的 flag 要翻了才写的


    三元环计数问题,即给你一张有 (n) 个点和 (m) 条边的无向图,求满足存在边 ((x,y)) ((y,z)) ((x,z)) 的无序对 ((x,y,z)) 的这样的集合的数目,或者统计这些集合的信息。

    首先考虑求出每个点的度数。

    然后对于两个端点度数不相同的边,由度数大的点指向度数小的点;对于两个端点度数相同的边,由标号大的点指向标号小的点。

    枚举三元环的时候,首先枚举第一个点 x,同时记一个 vis[i] 表示 (i) 是否和 (x) 连边了,再枚举 (x) 的出边得到点 (y) , 再枚举 (y) 的出边并 (check) 即可,复杂度不超过 (Theta(msqrt m))

    复杂度证明:

    对于指向度数小于 (sqrt m) 的点的边,暴力枚举的复杂度是正确的,即 (Theta(msqrt m))

    对于指向度数大于 (sqrt m) 的点的边,对每个点算他会被当做 (y) 枚举的次数,这个次数显然不会超过 (Theta(sqrt m)) 次,所以这部分的复杂度也是 (Theta(m sqrt m)) .

    所以总复杂度就是 (Theta(m sqrt m))


    例题 :


    SDOI2018 旧试题

    反演后复杂度瓶颈相当于一个三元环计数。


  • 相关阅读:
    L2-1 功夫传人 (25分)
    7-11 家庭房产(25 分)
    7-11 玩转二叉树 (25分)
    7-10 排座位 (25分)
    7-12 最长对称子串 (25分)
    7-10 树的遍历 (25分)
    STL
    Max Gcd
    水果
    Rails
  • 原文地址:https://www.cnblogs.com/s-r-f/p/13817605.html
Copyright © 2011-2022 走看看