二分图知识总结

二分图匹配 知识点整理 阅读详情

二分图:简单的说就是把图中的点分成二组,并且使得所有的边都跨越组的边界。

匹配:任意二条边都没有公共都顶点

最大匹配:一个图的匹配边数最多

完美匹配:一个图中的某个匹配中,所有的顶点都是匹配点

交替路:从一个未匹配的点出发,走交替路 依此经过匹配边 非匹配边 匹配边 ......形成的路径叫交替路

增广路:从一个未匹配点出发走交替路,经过一个未匹配的点

最大独立数:选取最多的点 使任意所选二点均不相连

最小点覆盖数:选取最少的点 是任意一条边至少有一个端点被选择

最小路径覆盖数:对于一个DAG(有向无环图)选取最少点边 使得每个顶点属于且仅属于一条路径

定理1:最大匹配数=最小点覆盖数

定理2:最大匹配数=最大独立数

定理3:最小路径覆盖数=顶点数-最大匹配数

下面是二分图的判断:

const int MAX=10010;
vector<int>G[MAX];
int edge[MAX][MAX];
int col[MAX];
int n;
int dfs(int u,int c){
    col[u]=c;
    for(int i=0;i<n;i++){
        if(edge[u][i]==1){
            if(col[i]==c) return 0;
            if(col[i]==0&&!dfs(i,-c)) return 0;
        }
    }
    return 1;
}
int bfs(int u){
    queue<int>q;
    q.push(u);
    col[u]=1;
    while (!q.empty()) {
        int v=q.front();
        q.pop();
        for(int i=0;i<G[v].size();i++){
            int x=G[v][i];
            if(col[x]==0){
                col[x]=-col[v];
                q.push(x);
            }
            else {
                if(col[x]==col[v])
                    return 0;
            }
        }
    }
    return 1;
}
void solve(){
    for(int i=1;i<=n;i++){
        if(col[i]==0&&!bfs(i))
        {
            cout<<"NO"<<endl;
            return;
        }
    }
    cout<<"YES"<<endl;
}

最大匹配的匈牙利算法:

const int  MAX=100010;
vector<int>G[MAX];
int n,m;
int vis[MAX],pei[MAX];
int dfs(int u){
    for(int i=0;i<G[u].size();i++){
        int v=G[u][i];
        if(!vis[v]){
            vis[v]=1;
            if(!pei[v]||dfs(pei[v])){
                pei[v]=u;
                return 1;
            }
        }
    }
    return 0;
}
void solve(){
    int ans=0;
    for(int i=1;i<=n;i++){
        mms(vis,0);
        if(dfs(i))
            ans++;
    }
    cout<<ans<<endl;
}

最大权的匹配KM:

求二分图中最大匹配的边权和最大

 

const int MAX=1e3+10;
int wx[MAX],wy[MAX];
int matchx[MAX];
int matchy[MAX];
int visx[MAX];
int visy[MAX];
int cntx=MAX;
int cnty=MAX;
int mp[MAX][MAX];
int d;
int dfs(int u){
    visx[u]=1;
    for(int v=0;v<cnty;v++){
        if(!visy[v]&&mp[u][v]!=INF){
            int t=wx[u]+wy[v]-mp[u][v];
            if(t==0){
                visy[v]=1;
                if(matchy[v]==-1||dfs(matchy[v])){
                    matchx[u]=v;
                    matchy[v]=u;
                    return 1;
                }
            }
            else if(t>0){
                d=min(d,t);
            }
        }
    }
    return 0;
}
int km(){
    mms(matchx,-1);
    mms(matchy,-1);
    mms(wx,0);
    mms(wy,0);
    for(int i=0;i<cntx;i++){
        for(int j=0;j<cnty;j++){
            if(mp[i][j]==INF)
                continue;
            wx[i]=max(wx[i],mp[i][j]);
        }
    }
    for(int i=0;i<cntx;i++){
        while (1) {
            d=INF;
            mms(visx,0);
            mms(visy,0);
            if(dfs(i)) break;
            for(int j=0;j<cntx;j++)
                if(visx[j]) wx[j]-=d;
            for(int j=0;j<cnty;j++)
                if(visy[j]) wy[j]+=d;
            
        }
    }
    int ans=0;
    for(int i=0;i<cntx;i++){
        if(matchx[i]!=-1)
            ans+=mp[i][matchx[i]];
    }
    return ans;
}
int n,k;
int main(){
    
        cin>>n;
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++)
                cin>>mp[i][j];
        }
        cout<<km()<<endl;
    
    
}

Rijndael密码算法 一 什么是Rijndael Rijndael是由比利时密码学家设计的分组密码算法,于2000年被选为新一代的标准密码算法——AES。今后会有越来越多的密码软件支持这种算法。 Rijndael的分组长度和密钥长度可以分别以32比特为单位在128比特和256比特的范围内进行选择。不过在AES的规格中,分组长度固定为128比特,密钥长度只有128、192和256比特三种。 二 Rijndael的加... 阅读详情

相关推荐

手把手教你用Python实现双三次插值(附OpenCV对比测试)

本文深入解析了双三次插值算法的数学原理,并提供了从零开始的Python实现教程。通过与OpenCV官方实现的对比测试,详细评估了不同插值算法(包括最邻近差值、双线性插值)在图像质量与计算性能上的差异,帮助开发者掌握高质量图像缩放的核心技术。

weixin_29310605的博客 293

二分图总结

二分图是什么? 二分图 是指将所有点分成两个集合, 使得所有边只出现在集合之间, 那就是二分图 二分图的性质: 二分图一定能进行无矛盾的染色 二分图一定不含有奇数环 二分图不一定是连通图 二分图的判定问题, 一般常用的方法是染色法判定二分图, 相邻的两个点用不同的颜色染色, 只要某个点染色不成功就说明整个图不是二分图, 染色不成功等价于相邻的点染了相同的颜色 #include<bits/stdc++.h> using namespace std; const int N = 3e5 +

CPP2021的博客 670

不只是对齐:用 MFA 和 Praat 给你的语音数据集快速生成 TextGrid 标注文件

本文详细介绍了如何利用Montreal Forced Aligner(MFA)和Praat工具快速生成TextGrid标注文件,大幅提升语音数据标注效率。通过批量对齐、质量校验和跨语言处理等实战技巧,帮助研究者构建自动化标注流水线,适用于语音合成和语音识别等多种应用场景。

weixin_30675247的博客 378

二分图及其相关知识总结

二分图及其相关知识总结 pre: 二分图:图G划分为两个点集A,B且在同一点集内的所有点互不相交的图. 匹配:在二分子图的边集M中如果M中的每条边的两个端点只有该条边与这两个端点相连,则M称为一个匹配。 匹配边:两个相匹配的点之间的连线。 最大匹配:图中包含边数最多的匹配。 完备匹配:如果有一边的点全都是匹配点,则称这个匹配为完备匹...

A4401780916的博客 304

告别配置噩梦:用Vcpkg三行命令为Easy3D自动安装Boost、CGAL和Qt(VS2022实测)

本文详细介绍了如何使用Vcpkg工具在VS2022环境下为Easy3D项目一键安装Boost、CGAL和Qt等依赖库,解决传统手动配置的复杂性问题。通过三行简单命令即可自动完成下载、编译和路径配置,大幅提升开发效率,特别适合C++开发者快速搭建3D图形开发环境。

weixin_42525582的博客 210

Android13系统设置第三方app为设备所有者

DevicePolicyManagerService.java文件所在目录是frameworks/base,记得将包类名换成自己app的。2. 将拷贝到系统分区下的两个xml文件继续通过init.rc服务拷贝到data/system/目录下并修改权限。1. 拷贝设备所有者和设备管理器两个对应的xml文件到系统分区。

wzh048503的博客 2503

二分图知识点总结

二分图知识点 1.最小点覆盖 1.1 定义:最小点覆盖是一个点集,用最少的点和所有边关联 公式: 最小点覆盖数 = 最大匹配数 证明:下图非常关键 1.我们可以这么构造一组最小点覆盖的点集。 从二分图的右部的每个未匹配点出发,找一条满足未匹配边-匹配边-未匹配边-匹配边……-未匹配边-匹配边的交叉路,并标记路径上的点。完成之后,左部上标记的点和右部上未标记的点共同组成了一个最小点覆盖...

dawuga的博客 406

树莓派 RP2350B 开发环境搭建

本文介绍了树莓派RP2350B开发环境的搭建过程。

张一西的博客 286

二分图详解----匈牙利算法+km算法+ Gale-Shapley---婚姻匹配算法算法+例题

先介绍一下基本概念 以下基本概念转自其他的博客,不是原创 二分图:简单来说,如果图中点可以被分为两组,并且使得所有边都跨越组的边界,则这就是一个二分图。准确地说:把一个图的顶点划分为两个不相交集   和  ,使得每一条边都分别连接 、   中的顶点。如果存在这样的划分,则此图为一个二分图。二分图的一个等价定义是:不含有「含奇数条边的环」的图。图 1 是一个二分图。为了清晰,我们以后都把它画成图...

qq_40938077的博客 1万+

基于Simulink的PMSM轮毂电机崎岖路面悬架协同控制仿真

本文完成了基于Simulink的PMSM轮毂电机崎岖路面悬架协同控制仿真,实现了:✅ 构建了四轮独立驱动+主动悬架高保真整车模型✅ 实现了Skyhook主动悬架控制✅ 设计了驱动-悬架状态共享与协同决策机制✅ 验证了5 m/s高速下连续颠簸路面稳定通过能力✅ 为高性能移动机器人提供一体化底盘解决方案。

xiaoheshang_123的博客 190

AI之KE:Knowledge Engineering知识工程的简介、发展、应用案例之详细攻略

AI之KE:Knowledge Engineering知识工程的简介、发展、应用案例之详细攻略 目录 Knowledge Engineering知识工程的简介 0.1、What 0.2、How 0.3、Why 1、知识工程过程的5个活动 2、知识图谱的应用 Knowledge Engineering知识工程的发展 1、前知识工程时期——1950-1970时期:图...

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 5335

二分图相关知识

转:《二分图相关知识指南》

Freopen的博客 179

ultralytics.data.utils——utils.py子模块代码详读

ultralytics.data.utils——utils.py子模块代码详读

Together_CZ的博客 1720

关于二分图的小知识

二分图的小预习 新学了个关于图论的小算法 过来水篇博客 ヾ(。ꏿ﹏ꏿ)ノ゙ 二分图的概念 书面语言的解释 二分图又称作二部图,是图论中的一种特殊模型。 设GGG=(VVV,{RRR})是一个无向图。如顶点集VVV可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属两个不同的子集。则称图GGG为二分图。 蒟蒻的理解 设GGG=(VVV,EEE)是一个无向图,如果顶点VVV可分割为两个互不相交的子集(AAA,BBB),并且图中的每条边(iii,jjj)所关联的两个顶点i和j分别属于这两个不同的顶点集(

Y的博客 773

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

二分图知识点

给定一个二分图G(无向图),在G的一个子图M中,M的边集中的任意两条边都不依附于同一个顶点,则称M是一个匹配. 选择这样的边数最大的子集称为图的最大匹配问题(maximal matchingproblem) 如果一个匹配中,图中的每个顶点都和图中某条边相关联,则称此匹配为完全匹配,也称作完备匹配。 如果该二分图的每条边都有一个权值且存在完备匹配,那...

qq_40859951的博客 246

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

二分图相关知识指南

  写在之前:这次动笔前花的学习时间比较长,因为越学,越发现二分图还有更多相关的知识。所以本文不打算将所有内容展开讲述,而是罗列知识点,具体内容将在其他文章里分开讲解。也就是说,本文只是一篇二分图学习的导航指南。   二分图的定义与判定   二分图的最大匹配---匈牙利算法   二分图的完全匹配---KM算法   二分图性质及其应用(konig定理) ...

知行合一 2466

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

二分图知识

二分图

Troye的博客 148

关于二分图问题的一些知识

二分图相关问题: 1、二分图最大匹配   (定义:匹配是二分图中边的集合,且集合中的任意两条边没有公共点,包含边数最多的匹配就是最大匹配) 2、二分图最小覆盖   (寻找一个点集,是的图中每一个边至少有一个点在该边上,即用最少的顶点去覆盖所有的边) 3、二分图最大独立集 (寻找一个点集,其中任意两点在图中无对应边) 4、二分图最小路径覆盖  (用尽量少的不相交简单路径覆盖有向无环图的所

bigman_123的专栏 785

二分图简单知识

二分图的定义:每两个相邻的节点不能染相同的颜色,可以用两种颜色染完所有的图,简单来说就是非奇数环图。 匹配:在二分图的子图中,任意两条边不依附于同一个顶点 最大匹配:二分图中所含有的最大匹配数 完美匹配:图中的每个点都是匹配点 匹配点:匹配边上的两点 增广路径:若P是图G中一条联通两个未匹配顶点的路径,且属于M的边和不属于M的边在P上交替出现,则称P为相对于M的一条增广路径。 最小点覆盖:选出最小的点数,使得二分图中的任意一条边的其中一个点在这个点的集合中=二分图的最大匹配数。 最大独立集:在二分图

qq_54783066的博客 903

二分图的基本知识

二分图基础知识 昨天晚上开始看二分图,到现在基本的东西学会了 我就写一下我自己的理解   首先什么是二分图 顾名思义就是能分成两个部分的图 要注意的是,‘分’的是点 并且这两个集合(这里我们称作X集合和Y集合)内部所有的点之间没有边相连,也就是说X集合中任何两点之间都不会有边相连, Y亦然   定理1:无向图G为二分图的一个冲要条件是 1、G中至少包含两个顶点  2、G中所有的回...

a2296291012的博客 491

二分图匹配小知识点

二分图的最小顶点覆盖: 定义: 选一个点相当于覆盖以它为端点的所有边,最小顶点覆盖就是找最少数量这样的点 定理: 二分图最小顶点覆盖 = 二分图最大匹配 证明: 二分图最大匹配能覆盖所有的边 ...

trouble_的博客 317

二分图基础知识

二分图定义 顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属于这两个互不相交的子集,两个子集内的顶点不相邻。 抽象理解:将人群分为男生和女生两部分,一对一的交往 二分图匹配 在二分图的一个子图M中,M的边集中的任意两条边都不依附于同一个顶点,则称M是一个匹配。 最大匹配:(匈牙利算法) 选择这样的边数最大的子集称为图的最大匹配问题,最大匹配的边数称为最大匹配数。 完全匹配...

Hello World 399
上一篇: 网络流算法-最大流问题总结-(Edmonds_Karp+Dinic优化+ISAP优化)
下一篇: 小D和他的魔法石(完全背包+贪心)
郭晋龙
博客等级 码龄6年 940粉丝 449原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭晋龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值