二分图最大匹配算法-Hopcroft-Karp模板

时间:2022-04-15 14:51:06

时间复杂度:O((√V)*E)

#include<stdio.h>
#include<string.h>
const int N=,M=,INF=0x3f3f3f3f;
int dx[N],dy[M],sx[N],sy[M],p[N],q[N],a[N][M],l,r,n,m,d;
int bfs()
{
l=r=;
memset(dx,-,sizeof(dx));
memset(dy,-,sizeof(dy));
int i,u;d=INF;
for(i=;i<=n;i++)
{
if(sx[i]==-)
{
q[++r]=i;
dx[i]=;
}
}
while(l<r)
{
u=q[++l];
if(dx[u]>d) break;
for(i=;i<=m;i++)
{
if(a[u][i]&&dy[i]==-)
{
dy[i]=dx[u]+;
if(sy[i]==-) d=dy[i];
else
{
dx[sy[i]]=dy[i]+;
q[++r]=sy[i];
}
}
}
}
return d!=INF;
}
int dfs(int u)
{
for(int i=;i<=m;i++)
{
if(a[u][i]&&!p[i]&&dy[i]==dx[u]+)
{
p[i]=;
if(sy[i]!=-&&dy[i]==d) continue;
if(sy[i]==-||dfs(sy[i]))
{
sy[i]=u,sx[u]=i;
return ;
}
}
}
return ;
}
int HK_maxMatch()
{
int ans=,i;
memset(sx,-,sizeof(sx));
memset(sy,-,sizeof(sy));
while(bfs())
{
memset(p,,sizeof(p));
for(i=;i<=n;i++)
{
if(sx[i]==-)
{
ans+=dfs(i);
}
}
}
return ans;
}

H-K

二分图最大匹配算法-Hopcroft-Karp模板的更多相关文章

  1. hdu2389二分图之Hopcroft Karp算法

    You're giving a party in the garden of your villa by the sea. The party is a huge success, and every ...

  2. 二分图匹配之KM求二分图最佳匹配算法

    参考网址:http://blog.163.com/suntroop@yeah/blog/static/17012103120115185927194/ 对于具有二部划分( V1, V2 )的加权完全二 ...

  3. 【二分图】P3386洛谷模板

    题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正整数u,v,表示u,v有一条连边 ...

  4. 牛客多校第五场 E room 二分图匹配 KM算法模板

    链接:https://www.nowcoder.com/acm/contest/143/E来源:牛客网 Nowcoder University has 4n students and n dormit ...

  5. luogu P3386 【模板】二分图匹配

    二次联通门 : luogu P3386 [模板]二分图匹配 /* luogu P3386 [模板]二分图匹配 最大流 设置源点,汇点,连到每条边上 跑一边最大流即可 */ #include <i ...

  6. &ast;HDU 1054 二分图

    Strategic Game Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  7. hdu3729 I&&num;39&semi;m Telling the Truth (二分图的最大匹配)

    http://acm.hdu.edu.cn/showproblem.php?pid=3729 I'm Telling the Truth Time Limit: 2000/1000 MS (Java/ ...

  8. UESTC 919 SOUND OF DESTINY --二分图最大匹配&plus;匈牙利算法

    二分图最大匹配的匈牙利算法模板题. 由题目易知,需求二分图的最大匹配数,采取匈牙利算法,并采用邻接表来存储边,用邻接矩阵会超时,因为邻接表复杂度O(nm),而邻接矩阵最坏情况下复杂度可达O(n^3). ...

  9. &lbrack;HNOI 2013&rsqb; 消毒 (搜索,二分图匹配)

    题目大意 一个a * b * c(a * b * c <= 5000)大小的长方体中有一些点需要被覆盖,每次可以选择任意大小的长方体,覆盖其中的点,产生的代价为这个长方体长宽高中最小的那个的长度 ...

随机推荐

  1. awk 筛选特定长度的序列

    awk '/^>/ {printf("\n%s\t",$0);next;} {printf("%s",$0);} END {printf("\n ...

  2. SQL Server编程(02)自定义函数

    在编程过程中,我们通常把特定的功能语句块封装称函数,方便代码的重用.我们可以在SQL Server中自定义函数,根据函数返回值的区别,我们自定义的函数分两种:标量值函数和表值函数. 自定义函数的优点: ...

  3. 转:鏖战双十一-阿里直播平台面临的技术挑战&lpar;webSocket&comma; 敏感词过滤等很不错&rpar;

    转自:http://www.infoq.com/cn/articles/alibaba-broadcast-platform-technology-challenges 鏖战双十一-阿里直播平台面临的 ...

  4. Win7超级终端查看单片机printf输出

    问题描述:     编写单片机C程序时,经常会用到printf输出信息进行查看,如何查看printf输出? 问题解决:     (1)编写单片机C程序     ucos是一个实时多任务操作系统,以上是 ...

  5. Qt之窗口动画(下坠、抖动、透明度)(还有好多相关帖子)

    简述 前面几节中我们介绍了关于动画的基本使用,有属性动画.串行动画组.并行动画组.这节我们来实现一些特效,让交互更顺畅. 简述 示例 效果 源码 更多参考 示例 下面,我们以geometry.pos. ...

  6. 【剑指offer】q50:树节点最近的祖先

    #@ root: the root of searched tree #@ nodeToFind: the tree-node to be found #@ path: the path from r ...

  7. Apache Kafka系列&lpar;二&rpar; 命令行工具(CLI)

    Apache Kafka命令行工具(Command Line Interface,CLI),下文简称CLI. 1. 启动Kafka 启动Kafka需要两步: 1.1. 启动ZooKeeper [roo ...

  8. rpc之thrift

    rpc之thrift 一.介绍 thrift是一个rpc(remove procedure call)框架,可以实现不同的语言(java.c++.js.python.ruby.c#等)之间的相互调用. ...

  9. java基础学习系列三

    产生随机数 例如 [a,b] Math.random*(b-a+1)+a 公式推算 [3,55]-----[0,52]+3 *53+3

  10. SOC(网络安全管理平台)

    SOC平台,网络安全管理平台. 提供集中.统一.可视化的安全信息管理,通过实时采集各种安全信息,动态进行安全信息关联分析与风险评估,实现安全事件的快速跟踪.定位和应急响应.从监控.审计.风险和运维四个 ...