首页 > 其他分享 >无向图三元环计数

无向图三元环计数

时间:2023-10-04 19:22:39浏览次数:25  
标签:lang rang le sqrt 计数 无向 出边 三元

考虑给无向图定向,设 \(d_u\) 为点 \(u\) 的度数,对于无向边 \(\lang u,v\rang\),若 \(d_u<d_v\) 或 \(d_u=d_v\) 且 \(u<v\),我们在新图中连有向边 \(\lang u,v\rang\),否则连有向边 \(\lang v,u\rang\),容易发现新图必然是一张 DAG。

我们枚举三元环中的一个点 \(x\),在新图中同时标记 \(x\) 的所有出边并枚举它的出边 \(\lang x,y\rang\),枚举 \(y\) 的出边 \(\lang y,z\rang\),如果存在边 \(\lang x,z\rang\),那么 \((x,y,z)\) 就是原图中的一个三元环,正确性容易验证。

分析复杂度。设 \(d'_x\) 为点 \(x\) 在新图中的出度,\(E\) 为新图的边集,则时间复杂度即为 \(\displaystyle\mathcal{O}(\sum_{\lang x,y\rang\in E}d'_y)\)。以下将证明对任意一个点 \(y\),\(d'_y\le\sqrt{m}\):

  • 若 \(d_y\le\sqrt{m}\):显然有 \(d'_y\le d_y\le\sqrt{m}\);
  • 若 \(d_y>\sqrt{m}\):则对于 \(y\) 的任意一条出边 \(\lang y,z\rang\),有 \(d_z\ge d_y>\sqrt{m}\),所以最多存在 \(\dfrac{m}{\sqrt{m}}=\sqrt{m}\) 个 \(z\),因此 \(d'_y\le\sqrt{m}\)。

综上所述,\(d'_y\le\sqrt{m}\),而一共只有 \(m\) 条边,所以总时间复杂度是 \(\mathcal{O}(m\sqrt{m})\) 的。

标签:lang,rang,le,sqrt,计数,无向,出边,三元
From: https://www.cnblogs.com/bykem/p/17742602.html

相关文章

  • 2023-10-04:用go语言,现有一棵无向、无根的树,树中有 n 个节点,按从 0 到 n - 1 编号 给你
    2023-10-04:用go语言,现有一棵无向、无根的树,树中有n个节点,按从0到n-1编号给你一个整数n和一个长度为n-1的二维整数数组edges,其中edges[i]=[ai,bi]表示树中节点ai和bi之间存在一条边。每个节点都关联一个价格。给你一个整数数组price,其中price[i]是第i......
  • 2023-10-04:用go语言,现有一棵无向、无根的树,树中有 n 个节点,按从 0 到 n - 1 编号 给你
    2023-10-04:用go语言,现有一棵无向、无根的树,树中有n个节点,按从0到n-1编号给你一个整数n和一个长度为n-1的二维整数数组edges,其中edges[i]=[ai,bi]表示树中节点ai和bi之间存在一条边。每个节点都关联一个价格。给你一个整数数组price,其中price[i]是......
  • VMWare 虚拟机 CPU 设置里针对 CPU 的 虚拟化 CPU 性能计数器(U) 选项功能介绍
    虚拟化技术在现代计算中发挥着关键作用,它允许多个虚拟机(VM)在单个物理主机上运行。为了优化虚拟机的性能和资源管理,VMware提供了一系列高级设置选项,其中之一是“虚拟化CPU性能计数器(U)”选项。在本文中,我将详细介绍这个选项的作用以及如何使用它,同时提供示例来说明其实际应用。......
  • P1144 最短路计数 题解
    Problem考察算法:拓扑排序+\(DP\)+\(Dijkstra\)。题目简述给出一个无向无权图,问从顶点\(1\)开始,到其他每个点的最短路有几条。思路先求出\(1\)号点到每个点的最短路\(d_i\)。分析每条边$(x,y)$:如果d[x]+1==d[y]:这条边有用。将所有有用的边拓扑排序......
  • 有向图访问计数
    现有一个有向图,其中包含n个节点,节点编号从0到n-1。此外,该图还包含了n条有向边。给你一个下标从0开始的数组edges,其中edges[i]表示存在一条从节点i到节点edges[i]的边。你从节点x开始,通过边访问其他节点,直到你在此过程中再次访问到之前已经访问过的节点。......
  • python中对列表的元素进行计数
     001、方法1 借助字典统计[root@pc1test2]#lstest.py[root@pc1test2]#cattest.py##测试程序#!/usr/bin/envpython3#-*-coding:utf-8-*-list1=["aa","bb","aa","cc","aa","dd",&qu......
  • C中三元运算符的优先级
    优先级很低,往往需要加一个括号在求二叉树的高度遇到的问题,属于对C不熟悉导致的bug//ret的值为20,ret1的值是22inta=10,b=20;intret=2+a>b?a:b;//先计算2+a,2+a>b为假,因此ret的值是20intret1=2+(a>b?a:b);//先计算(a>b?a:b),然后再计算2+......
  • P1989 无向图三元环计数 题解
    P1989无向图三元环计数题解考虑对无向图的边定向:对于每一条无向边,度数小的点向度数大的点连边,如果读书相等则按编号大小确定。这样枚举一个\(u\),再枚举它的出点\(v\),接着枚举\(v\)的出点\(w\),如果存在一个\(w\),\(u\)向它连边,那么\((u,v,w)\),就对应了原图中的一个三......
  • 对象转JSON 遇到的BigDecimal 科学计数法的问题,json转化字段单独处理
    问题描述:项目需要发送JSON数据,BigDecimal转成json仍然显示科学计数法,如果使用BigDecimai的toPlainString()需要将数据格式转为String,所以找了一下fastjson的自定义序列化内容,记录一下,以免以后忘记解决方案:方案一:JSONObject.toJSONString(vo,SerializerFeature.WriteBigDecimalA......
  • [洛谷]-5825排列计数-欧拉数、NTT
    目录边界对称性递推形式容斥https://www.luogu.com.cn/problem/P5825题意:我们记一个排列P的升高为\(k\)当且仅当存在\(k\)个位置\(i\)使得\(P_i<P_{i+1}\)。给定排列长度\(n\),对于所有整数\(k\in[0,n]\),求有多少个排列的升高为\(k\),\(1\leqn\leq2\times10^5\)......