KM算法
 #include <bits/stdc++.h>
#define N 1500
#define inf 999999999
using namespace std;
int a[N],bs[N],nx=,ny=,k;
int linky[N],lx[N],ly[N],slack[N];
int visx[N],visy[N],w[N][N];
int min(int a,int b){return (a<b)?a:b;}
int find(int x){
visx[x]=;
for(int y=;y<=ny;y++){
if(visy[y]) continue;
int t=lx[x]+ly[y]-w[x][y];
if(t==){visy[y]=;
if(linky[y]==-||find(linky[y])){
linky[y]=x;return ;
}
}
else if(slack[y]>t) slack[y]=t;
}
return ;
}
int km(){
memset(linky,-,sizeof(linky));
memset(ly,,sizeof(ly));
for(int i=;i<=nx;i++) lx[i]=-inf;
for(int i=;i<=nx;i++)for(int j=;j<=ny;j++)if(w[i][j]>lx[i])lx[i]=w[i][j];
for(int x=;x<=nx;x++){
for(int i=;i<=ny;i++)
slack[i]=inf;
while(){
memset(visx,,sizeof(visx));
memset(visy,,sizeof(visy));
if(find(x)) break;
int d=inf;
for(int i=;i<=ny;i++) if(!visy[i]&&d>slack[i]) d=slack[i];
for(int i=;i<=nx;i++) if(visx[i]) lx[i]-=d;
for(int i=;i<=ny;i++) if(visy[i]) ly[i]+=d; else slack[i]-=d;
}
}
int result=;
for(int i=;i<=ny;i++)
if(linky[i]>-) result+=w[linky[i]][i];
return result;
}
int main(){
scanf("%d%d%d",&nx,&ny,&k);
for(int i=;i<=k;i++){
int a,b,c;scanf("%d%d%d",&a,&b,&c);
w[a][b]=c;
}printf("%d\n",km());
return ;
}
匈牙利算法
 #include <cstdio>
#include <cstring>
#define N 1010
using namespace std;
int map[N][N];
int max,x1,m,y1,tot,ans;
int used[N],link[N];
int find(int t)
{
for(int i=;i<=y1;i++)
{
if(used[i]==&&map[t][i]==)
{
used[i]=;
if(link[i]==||find(link[i]))
{
link[i]=t;
return ;
}
}
}
return ;
}
int main()
{
scanf("%d%d%d%d",&max,&x1,&y1,&m);
max++;tot=x1+y1;
for(int i=;i<=m;i++)
{
int a,b;
scanf("%d%d",&a,&b);
map[a][b]=;
}
for(int i=;i<=y1;i++)link[i]=;
for(int i=;i<=x1;i++)
{
for(int i=;i<=y1;i++) used[i]=;
if(find(i))
ans++;
}
printf("%d\n",(max<tot-ans)? max:tot-ans);
return ;
}

贴板子系列_1-km算法,匈牙利算法的更多相关文章

  1. 【入门】匈牙利算法+HNOI2006 hero超级英雄

    一.关于匈牙利算法 匈牙利算法是由匈牙利数学家Edmonds提出的,用增广路径求二分图最大匹配的算法. 听起来高端,其实说白了就是: 假设不存在单相思(单身狗偷偷抹眼泪),在一个同性恋不合法的国家里( ...

  2. 匈牙利算法dfs模板 [二分图][二分图最大匹配]

    最近学了二分图最大匹配,bfs模板却死活打不出来?我可能学了假的bfs 于是用到了dfs模板 寻找二分图最大匹配的算法是匈牙利算法 匈牙利算法的主要程序是寻找增广路 寻找增光路是过程是:从一个未经配对 ...

  3. (转)二分图匹配匈牙利算法与KM算法

    匈牙利算法转自于: https://blog.csdn.net/dark_scope/article/details/8880547 匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名 ...

  4. 匈牙利算法与KM算法

    匈牙利算法 var i,j,k,l,n,m,v,mm,ans:longint; a:..,..]of longint; p,f:..]of longint; function xyl(x,y:long ...

  5. 匈牙利算法、KM算法

    PS:其实不用理解透增广路,交替路,网上有对代码的形象解释,看懂也能做题,下面我尽量把原理说清楚 基本概念 (部分来源.部分来源) 二分图: 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相 ...

  6. 二分图的最大匹配以及带权匹配【匈牙利算法+KM算法】

    二分图算法包括 匈牙利算法 与 KM算法. 匈牙利算法 在这里写上模板. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 #include< ...

  7. Hungary(匈牙利算法)——二分图最大匹配

    在复习匈牙利算法的时候,发现这么一篇介绍匈牙利算法的文章,非常通俗易懂,所以就借鉴过来了. 复杂度:邻接矩阵:O(v^3)邻接表:O(V*E) 附上链接:趣写算法系列之--匈牙利算法 下面就附上代码吧 ...

  8. "《算法导论》之‘图’":不带权二分图最大匹配(匈牙利算法)

    博文“二分图的最大匹配.完美匹配和匈牙利算法”对二分图相关的几个概念讲的特别形象,特别容易理解.本文介绍部分主要摘自此博文. 还有其他可参考博文: 趣写算法系列之--匈牙利算法 用于二分图匹配的匈牙利 ...

  9. 51 NOd 2006 飞行员配对(匈牙利算法二分匹配)

    题目来源: 网络流24题 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏  关注 第二次世界大战时期,英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一 ...

随机推荐

  1. jquery选择器及效率问题

    $('p2') //选择名字 $('.class') //选择class $('#id') //选择id $('#id li') //所有id=”id”标签内的li标签 $(“#id”).find(“ ...

  2. HDU4570:Multi-bit Trie(区间DP)

    Problem Description IP lookup is one of the key functions of routers for packets forwarding and clas ...

  3. SecureCRT 中 python 命令行使用退格键(backspace)出现 ^H 解决办法

    选项-->会话选项-->映射键 勾选"其他映射"中的两个选择框

  4. jhipster

    Client side: yeoman,grunt,bower,angularjs Server side: maven,spring,spring mvc rest,spring data jpa

  5. 深入理解计算机系统第二版习题解答CSAPP 2.8

    给出位微量的布尔去处的求值结果. 运算 结果 a 0110 1001 b 0101 0101     ~a 1001 0110 ~b 1010 1010     a&b 0100 0001 a ...

  6. Web网站与Web应用程序区别

    创建时的目录结构不同. WEB应用程序一般处理程序有命名空间,而网站中的没有.(因为应用程序最后要编译成一个DLL文件,会产生命名冲突,而网站每个页面会编译成每一个的DLL,不会文件内产生全名冲突). ...

  7. SQL查询数据库表字段值不为空或Null的所有列

    ) set @TableName = 'Agency' -- 表名 declare @querySql nvarchar(max) set @querySql = 'select ' ) declar ...

  8. jbpm4 回退、会签、撤销、自由流

    http://blog.csdn.net/xiaozhang0731/article/details/8699558 1. jBPM4的特点 jBPM是JBoss众多开源项目中的一个工作流开源项目,也 ...

  9. 图解JVM在内存中申请对象及垃圾回收流程

    http://longdick.iteye.com/blog/468368 先看一下JVM的内存模型: 从大的方面来讲,JVM的内存模型分为两大块: 永久区内存( Permanent space )和 ...

  10. oracle_11g 不同用户之间的数据迁移

    众所周知,IMP工具的FROMUSER和TOUSER参数可以实现将一个用户的的数据迁移到另外一个用户.同样的功能在IMPPDP工具中如何得以体现呢?答案就是:使用IMPPDP的REMAP_SCHEMA ...