无向图求三元环

【QT开发教程】如何在Qt中使用Protobuf进行高效数据序列化 Protocol Buffers(Protobuf)是Google开发的一种语言中立、平台中立、可扩展的序列化机制,常用于数据交换和存储。Qt作为一个跨平台的C++图形用户界面应用框架,可以与Protobuf结合使用,实现高效的数据序列化和反序列化。本文将介绍如何在Qt中集成和使用Protobuf,包括基本概念、安装步骤、使用示例以及实际应用。 阅读详情

无向图是一个稀疏图,点n<105n<105 边数m<min(105,n×(n−1)2)m<min(105,n×(n−1)2),现在给出n,m,E(边集合),求出这个三元环的个数,两个三元环不同是:当于对两个三元环的边,某个三元环存在一条边在另一个三元环中无法找到。
解法:暴力的方法可以使复杂度达到O(m×m−−√)O(m×m).具体解法如下:
首先我们先是记录,使用邻接表记录无向图,记录每个点的出度,每条边用hash存下来,这个如何存呢,可以把边转换成一个独一无二的数,假设这条边端点是ab,可以存下a×n+ba×n+b 和 b×n+ab×n+a,用set,map存都可以,这样如果我们得到两个点看是否相连,就看在set中是否能找到这个数。
储存过程结束后,开始从1-n枚举每个点设为x,然后找到所有和x相连的点记为y,并用link数组记录下link[y] = x,(此时相当于枚举了一条边)因为要找三元环,如果存在,另两个点肯定是和x相连的,这个时候分成两类
一:如果y点出度小于等于m−−√m,那么就直接继续找和y相连的点,如果和y相连的点z发现 link[z] = x,说明这个点z也是和x联通的,“然后找到所有和x相连的点记为y,并用link数组记录下link[y] = x”在z点实际是在这一步标记的。这样我们就是找到一个个数加一
二:如果y点出度大于m−−√m,那么我们从x的基础上,继续找一个点z,看z和y是否相连,判断方法就是计算z×n+yz×n+y 是否可以在set中找到,如果找到个数加一。
最终就完成了寻找,但是每个点都查找重复了三次,最后结果需要除以3。
复杂度分析:
为了方便说明我们按照上面叙述的算法,记枚举的第一个点为x,第二个点为y,最后一个点为z,
枚举的边用两端点表示如枚举的第一条边xy
下面进行分类讨论:
第一类点y的出度<=m−−√m,那么我们便继续枚举y的连接点z,这时候我们最多枚举的xy边(第一条边)有m条,每枚举完第一条边后,因为y的出度<=m−−√m,所以在枚举完第一条边的基础上,最多每次枚举m−−√m条边,所以此时的复杂度为O(mm−−√m)
第二类点y的出度>m−−√m,此时我们不在y点向外找点,我们回到x,找到另个与x相连的点z,此时找两个点所花费的复杂度大约是m−−√m*m−−√m=m,因为这样的y点不会超过m−−√m个,所以总的复杂度就是O(mm−−√m)
综上所述复杂度是O(mm−−√m)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5+10;
vector<int>G[maxn];
set<ll>st;
int vis[maxn],link[maxn],out[maxn];
int main(){
    ll ans,sum;
    int n,m,i,j,k,x,y,z,B;
    while(scanf("%d%d",&n,&m) != EOF){
        //初始化
        B = sqrt(m);
        st.clear();
        for(i = 1; i <= n; i++){
            G[i].clear();
            vis[i] = out[i] = link[i] = 0;
        }
        for(i = 1; i <= m; i++){
            scanf("%d%d",&x,&y);
            G[x].push_back(y);
            out[x]++;
            G[y].push_back(x);
            out[y]++;
            st.insert((ll)x*n+y);//hash存边
            st.insert((ll)y*n+x);
        }
        ans = 0;
        for(i = 1; i <= n; i++){//枚举第一个点
            x = i;
            vis[x] = 1;//标记
            for(j = 0; j < G[x].size(); j++)
                link[G[x][j]] = x;
            for(j = 0; j < G[x].size(); j++){
                sum = 0;
                y = G[x][j];//枚举第二个点,枚举了第一条边
                if(vis[y])
                    continue;
                if(out[y] <= B){//第一类
                    for(k = 0; k < G[y].size(); k++){
                        z = G[y][k];
                        if(link[z] == x)
                            sum++;
                    }
                }
                else{//第二类
                    for(k = 0; k < G[x].size(); k++){
                        z = G[x][k];
                        if(st.find((ll)z*n+y) != st.end())
                            sum++;
                    }
                }
                ans += sum;
            }
        }
        printf("%lld\n",ans/3);
    }
    return 0;
}
NTscan扫描工具 ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。 立即下载

相关推荐

TMS热管理RCP开发全流程:从MATLAB算法到硬件部署的5个关键步骤

本文详细解析了TMS热管理系统RCP开发的5个关键步骤,从MATLAB算法设计到硬件部署的全流程。通过熠速RCP平台,工程师可以高效实现热管理控制算法的仿真验证、硬件选型、实时化处理及系统集成,显著缩短开发周期并提升系统性能。文章特别强调了Simscape模型验证和硬件接口配置的重要性。

weixin_29224589的博客 388

三元环计数

算法如其名,就是用来找三元环的。 介绍 给出一张无向图,问图中有多少个三元组{x,y,z}\{x,y,z\}{x,y,z},满足图中存在 {x−y,y−z,z−x}\{x-y,y-z,z-x\}{x−y,y−z,z−x} 三条边。 转化 考虑将这张图转化为有向图:对于一条无向边 x−yx-yx−y,不妨设点 xxx 的度大于点 yyy 的度,那么就将这条无向边变成 x→yx \to yx→y。假如...

a_forever_dream的博客 1982

KEPServerEX实战:Modbus TCP与RTU双协议配置详解

本文详细解析了如何使用KEPServerEX软件同时配置与管理Modbus TCP和RTU混合网络。通过实战步骤,指导用户建立双协议通道、配置设备与标签,并分享核心的地址映射规则与通讯故障排查技巧,帮助工业自动化工程师高效集成多协议设备,简化数据采集架构。

weixin_29186249的博客 397

『图论』三元环计数

题解 我们可以统计每一个点的度数,对于边(u,v)(u,v)(u,v)而言,如果duu&lt;duvdu_u&lt;du_vduu​<duv​或者在度数相同时u&lt;vu&lt;vu<v,则从uuu连接一条vvv的边,否则由vvv连向uuu。 因此三元环的形态一定是由度数小或字典序较小的点连向其它两个点,其它两个点又是有一条边相连的。 我们可以枚举每一...

Ronaldo7_ZYB的博客 524

STM32G474串口调试避坑指南:从CubeMX配置到中断收发,手把手教你搞定USART1

本文详细解析了STM32G474串口调试中的常见问题,从CubeMX配置到中断收发,提供USART1的避坑指南。涵盖时钟树同步、GPIO模式选择、中断接收逻辑、波特率偏差修正等关键点,帮助开发者高效解决串口通讯难题,提升嵌入式开发效率。

weixin_29191081的博客 209

CST实战:变容二极管电容曲线提取全流程(附S参数设置技巧)

本文详细介绍了在CST Studio Suite中提取变容二极管电容-电压(C-V)曲线的完整实战流程。重点解析了S参数仿真的核心原理、DCFEED模块的正确配置、参数扫描的设置技巧,并探讨了集成SPICE模型进行精确仿真的方法,帮助射频工程师高效、准确地获取器件关键特性。

weixin_29237635的博客 528

图论三元环(并查集的高级应用)

接下来 m 行,第i行输入两个正整数 ai,bi​,表示第i条边连接 ai,bi​结点。2. 存在边 c ,使得 a,c 属于同一个集合且 b,c 属于同一个集合。如果两条边 a,b属于同一个集合当且仅当满足以下条件之一。那么请问,以下连通图的所有边是否都属于同一个集合?在一个连通图中,任何一条边都属于一个集合。1. a,b 是某一个三角形的两条边。每组样例第一行输入两个正整数 n,m。第一行输入 T,表示 T 组样例。数据保证图联通,且没有重边和自环。输出一个字符串表示答案。

AuRoRamth的博客 618

Anti-UAV 反无人机大赛数据集处理脚本(1)标签转换为YOLO格式

【代码】Anti-UAV 反无人机大赛数据集处理脚本(1)标签转换为YOLO格式。

qq_45937329的博客 534

无向图求环路

<br />1. 判断N结点的无向图G是否有环<br /><br />假定:结点个数为M,边条数为E<br />遍历一遍,判断图分为几部分(假定为P部分,即图有 P 个连通分量)<br />对于每一个连通分量,如果无环则只能是树,即:边数=结点数-1<br />只要有一个满足      边数   >   结点数-1<br />原图就有环<br />将P个连通分量的不等式相加,就得到:<br />    所有边数   >   所有结点数 + 连通分量个数<br />即:  E + P > M  所以只有判断 

岩山放牛娃 4222

计算机视觉:相机模型与参数标定

一、相机投影模型 1、小孔成像 2、相机模型中的四个平面坐标系 3、像主点偏移 4、畸变现象与内参矩阵 5、外参矩阵 二、相机标定:张正友棋盘格标定法 1、张正友棋盘格标定法描述 2、计算外参和内参 2.1 计算单应性矩阵H 2.2 计算内参数矩阵 2.3 计算外参数矩阵 3、实验:MATLAB实现 3.1 实验数据 3.2实验过程 3.3 实验结果 4、实验:OpenCV实现 4.1 实现代码 4.2 实验结果 5、实验分析与总结

DreamWendy的博客 2514

【大数据技术干货】(还不懂数仓,数据中心?看这一篇就够了!)在实际的开发生产中,让你了解企业级数据中心整体架构(DB+ETL+ODS+DW+DM)的各个层次的过程详解,数据联系及功能区分

一 企业级数据中心架构 数据仓库的整体架构,各个系统的元数据通过ETL同步到操作性数据仓库ODS中,对ODS数据进行面向主题域建模形成DW(数据仓库),DM是针对某一个业务领域建立模型,具体用户(决策层)查看DM生成的报表。 二 DB 三 ETL(Extract-Transform-Load) ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。 ETL是BI项目重要的一个环节。 通常情况下,在BI项目中ET

liuchunhang的博客 1288

【luogu P1989】无向图三元环计数(图论)(分类讨论)

给你一个无向图,问你有多少个三元组 (a,b,c),使得 ab,bc,ac 之间都有边。 我们把不同排列得到的三元组看做一个。

欢迎您的光顾awa 370

游戏服务器框架之跨服(一)

如今的游戏开发,不搞个跨服玩法都不好意思说在做游戏了(当然,也跟游戏类型有关,一些轻度休闲游戏可以排除在外)。跨服玩法的设计,可以进一步激发玩家追求高战力的虚荣心,也可以汇聚玩家数量,避免单服日活跃低呈现死服现象。 几种常见的跨服玩法拓扑结构 一,不同游戏服的玩家进入中立服务器进行战斗,例如跨服天梯类玩法。 游戏服有很多个节点,中心服务器也有很多节点。只要保证对战的双方同时进入同一个中心服游戏进程即可。 二,若干个游戏服组成一个社区,全部服务器包含多个社区,例如世界服玩法。 三,游戏服A玩

littleschemer的博客 5771

求无向图的三元环个数

问题描述: 给定nnn个点,mmm条边的无向图,求三元环个数。 n≤100000,m≤min(200000,n∗(n−1)/2)n\le100000,m\le min(200000,n*(n-1)/2)n≤100000,m≤min(200000,n∗(n−1)/2) 问题分析: 搜集到的比较好的解法主要有两种: 法一: 把边定向后枚举一条边 先按照原图的边求出每个点的度数,然后把原图的无向边改为有...

Master.Yi的博客 867

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

无向图求三元环的个数

原文链接 它实际上是想始终保证复杂度为m×根号m,也就是保证枚举的边数尽可能小于根号m。所以判断一下,小于根号m直接可以进行下一个点的枚举就像dfs深搜一样,如果大了,我们不继续,而是从最初点上枚举别的就像bfs广搜一样 代码: /* * 无向图求三元环 */ #include&lt;cstdio&gt; #include&lt;vector&gt; #include&lt;uno...

兜率工的博客 1222

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

求无向图中的三元环个数

无向图是个稀疏图,点数n<105n<10^5, 边数m<min(105,n∗(n−1)2)m<min(10^5, \frac{n*(n - 1)}{2}).现在给出n,m,E(边的集合)n, m,E(边的集合)。求出这个无向图中三元环的个数,两个三元环不同是:当对于两个三元环的边,某个三元环存在一条边在另一个三元环的边中无法找到!首先想到的方法只能是暴力求解,很直接的暴力就是枚举每一条边,以一条边度

FlushHip 7330

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

hdu 6184 Counting Stars(求无向图的三元环数量)

Counting Stars Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 309    Accepted Submission(s): 82 Problem Description Little A is an

MR CODER 1249

hdu 6184 Counting Stars(求无向图三元环)

Little A is an astronomy lover, and he has found that the sky was so beautiful! So he is counting stars now! There are n stars in the sky, and little A has connected them by m non-directional edges. It is guranteed that no edges connect one star with

HJY 904

hdu6184求无向图三元环的个数(m*sqrt(m))

给定n个点m条边的稀疏图,对于每一条边,枚举两个端点中度数较少的端点的邻接点,判断是否构成三元环。 #include&lt;stdio.h&gt; #include&lt;vector&gt; #include&lt;set&gt; #include&lt;math.h&gt; #include&lt;algorithm&gt; using namespace std; #define LL l...

best_jayc的博客 396

[SDOI2018]旧试题

题目大意 给定\(A,B,C\),求: \[ \sum_{i=1}^A\sum_{j=1}^B\sum_{k=1}^C d(ijk)\ \ \ mod \ 10^9+7 \] 题解 \[ \sigma_0(ijk)=\sum_{x|i}\sum_{y|j}\sum_{z|k}[(x,y)==1][(x,z)==1][(y,z)==1] \] 那么我们的答案就是: \[ \sum_{i=1}^a\s...

weixin_34365417的博客 162

无向图中三元环的个数

#include &lt;bits/stdc++.h&gt; #define LL long long using namespace std; const int bas = 1e5+1; const int maxn = 1e5+5; vector&lt;int&gt; G[maxn]; int n, m; //unordered_set&lt;LL&gt; _hash; set&lt;L...

空白 1145

hud 6184

$n$ 点 $m$ 边的图求多少对三元环公用一条边变无向图为有向图 建图方法:对于每条无向边 度数小的端点向度数大的端点连边度数相同则编号小的点向编号大的点连边这样就构成 $DAG$遍历: 遍历每条边的 $u$标记另一端点 $v$ 遍历该边的 $v$如果 $v$ 的 $v_2$ 的标记与 $v$ 相同则说明构成了三元环 $(u, v), (v, v_2), (u, v_2)$ 记录每条边构成...

weixin_30808253的博客 81

∆ (triangle)

2.1 题目描述 给定一个无自环重边的无向图,求这个图的三元环1的个数以及补图2的三元环个数。 2.2 输入格式 第一行 2 个数 n, m ,分别表示图的点数、边数。 接下来 m 行,每行两个数 u, v ,表示一条连接 u, v 的无向边。 2.3 输出格式 一行两个数,依次表示原图的三元环个数以及补图的三元环的个数。 2.4 样例输入 5 5 1 2 1 3 ...

aln1541的博客 191

HDU - 6184 Counting Stars (无向图找三元环)

Little A is an astronomy lover, and he has found that the sky was so beautiful!So he is counting stars now!There are n stars in the sky, and little A has connected them by m non-direc...

weixin_30415113的博客 212

acm-无向图三元环、四元环计数

三元环计数 考虑对无向图的边进行定向,度数小的点连向度数大的点,如果度数相同则编号小的点连向编号大的点。 然后再这张新图(有向图)中我们枚举所有点uuu,对于每个点uuu我们枚举它的出边对应的端点vvv,先给这些点打上标记,然后再枚举uuu的出边对应的端点vvv,枚举vvv的出边对应的端点www,如果www是标记点的话就找到一个三元环,每个三元环都一定只会被恰好枚举一次,因此找到一个三元环就++ans++ans++ans即可,注意枚举下一个uuu之前需要清空标记数组。 考虑正确性,经过重定向后新图一定是一张

qq_30361651的博客 1832

【学习笔记】无向图、有向图的三元环、四元环计数问题(根号分支+bitset)

bitset,根号分治暴力人上人系列

2429
上一篇: Covering HDU - 6185 (找递推公式+矩阵快速幂)
下一篇: Counting Stars HDU - 6184(无向图三元环计数)
Guuuuuu老师儿
博客等级 码龄9年 259粉丝 718原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值