贴板子系列_1-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算法,匈牙利算法的更多相关文章
- 【入门】匈牙利算法+HNOI2006 hero超级英雄
一.关于匈牙利算法 匈牙利算法是由匈牙利数学家Edmonds提出的,用增广路径求二分图最大匹配的算法. 听起来高端,其实说白了就是: 假设不存在单相思(单身狗偷偷抹眼泪),在一个同性恋不合法的国家里( ...
- 匈牙利算法dfs模板 [二分图][二分图最大匹配]
最近学了二分图最大匹配,bfs模板却死活打不出来?我可能学了假的bfs 于是用到了dfs模板 寻找二分图最大匹配的算法是匈牙利算法 匈牙利算法的主要程序是寻找增广路 寻找增光路是过程是:从一个未经配对 ...
- (转)二分图匹配匈牙利算法与KM算法
匈牙利算法转自于: https://blog.csdn.net/dark_scope/article/details/8880547 匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名 ...
- 匈牙利算法与KM算法
匈牙利算法 var i,j,k,l,n,m,v,mm,ans:longint; a:..,..]of longint; p,f:..]of longint; function xyl(x,y:long ...
- 匈牙利算法、KM算法
PS:其实不用理解透增广路,交替路,网上有对代码的形象解释,看懂也能做题,下面我尽量把原理说清楚 基本概念 (部分来源.部分来源) 二分图: 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相 ...
- 二分图的最大匹配以及带权匹配【匈牙利算法+KM算法】
二分图算法包括 匈牙利算法 与 KM算法. 匈牙利算法 在这里写上模板. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 #include< ...
- Hungary(匈牙利算法)——二分图最大匹配
在复习匈牙利算法的时候,发现这么一篇介绍匈牙利算法的文章,非常通俗易懂,所以就借鉴过来了. 复杂度:邻接矩阵:O(v^3)邻接表:O(V*E) 附上链接:趣写算法系列之--匈牙利算法 下面就附上代码吧 ...
- "《算法导论》之‘图’":不带权二分图最大匹配(匈牙利算法)
博文“二分图的最大匹配.完美匹配和匈牙利算法”对二分图相关的几个概念讲的特别形象,特别容易理解.本文介绍部分主要摘自此博文. 还有其他可参考博文: 趣写算法系列之--匈牙利算法 用于二分图匹配的匈牙利 ...
- 51 NOd 2006 飞行员配对(匈牙利算法二分匹配)
题目来源: 网络流24题 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 第二次世界大战时期,英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一 ...
随机推荐
- Java加密算法 AES
版权声明:本文为博主原创文章,转载请注明出处. [java] view plain copy print?在CODE上查看代码片派生到我的代码片 package com.stone.security; ...
- QT运行时加载UI文件
写QT程序里运行时加载UI文件,代码如下: 点击(此处)折叠或打开 #include "keyboard.h" #include <QtUiTools> #incl ...
- 动手写一个快速集成网易新闻,腾讯视频,头条首页的ScrollPageView,显示滚动视图
最终效果 更新示例.gif 示例效果.gif 示例效果1.gif 示例效果2.gif 示例效果3.gif 示例效果4.gif 示例效果5.gif 示例效果6.gif 一.构思部分: 打算分为三个部分, ...
- Linux--------------安装vim
1.相关提示 -bash: vim: command not found 2.查看vim是否安装 rpm -qa|grep vim vim-en ...
- Android(java)学习笔记148:Eclipse中代码提示去掉@override,不然就报错!
把项目下载下来后有@Override的注释的方法会报错,如果把@Override去掉就不报错了.经过查阅后发现:@override注释在jdk1.5环境下只能用于对继承的父类的方法的重写,但不能用于对 ...
- [整理]:oracle spool 用法
本文来自iDB Stock:http://www.idb-stock.net/idb/2011/06/01/153.html 1.spool的作用是什么? spool的作用可以用一句话来描述:在sql ...
- mongodb环境部署
mongodb 环境部署 1.环境说明 安装软件:mongodb-linux-x86_64-.tgz 软件安装位置:/usr/local/mongodb 数据存放位置:/var/mongodb/dat ...
- 前端编辑器 之 sublime-text3
工善欲其事,必先利其器 作为一名前端工程师,一定要有熟练,便捷的开发工具,虽然自己一直使用神一样的编辑器,但是却没有使用的像神一样,于是再次深入了解下这款工具 下载sublime-text 去官网下载 ...
- Lucene.net常用功能说明
Lucene.net是一个.net下的全文检索类库.配置简单,功能丰富,比较成熟.我在项目中用Lucene.net有一段时间了,这里我把常用一些功能写出来,与大家一起分享. Lucene.net用的是 ...
- MFC对话框程序EDIT类控件的自动换行,垂直滚动条自动下移
1.新建一个Edit Control,将其Multiline属性设置为True,Auto HScroll属性设置False,这样就可以实现每一行填满后自动换行了. 2.再将Vetrical Scr ...