hdu_2255_奔小康赚大钱(KM带权二分匹配板子)
题目连接:hdu_2255_奔小康赚大钱
存个板子
/*
其实在求最大 最小的时候只要用一个模板就行了,
把边的权值去相反数即可得到另外一个.求结果的时候再去
相反数即可,最大最小有一些地方不同。。
*/
#include <iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
const int N = ;
const int INF = (<<)-;
int w[N][N];
int lx[N],ly[N]; //顶标
int linky[N],visx[N],visy[N],slack[N];
int n;
bool find(int x){
visx[x]=;
for(int y=;y<=n;y++){
if(visy[y])continue;
int t=lx[x]+ly[y]-w[x][y];
if(t==){
visy[y] = ;
if(linky[y]==-||find(linky[y]))return linky[y]=x,;
}
else if(slack[y]>t)slack[y]=t;
}
return ;
} int KM(){
int i,j;
memset(linky,-,sizeof(linky));
memset(ly,,sizeof(ly));
for(i=;i<=n;i++){
lx[i]=-INF;
for(j = ;j<=n;j++)
if(w[i][j]>lx[i])lx[i]=w[i][j];
}
for(int x=;x<=n;x++){
for(i=;i<=n;i++)slack[i]=INF;
while(){
memset(visx,,sizeof(visx));
memset(visy,,sizeof(visy));
if(find(x))break;//找到增广轨,退出
int d=INF;
for(i=;i<=n;i++) //没找到,对l做调整(这会增加相等子图的边),重新找
if(!visy[i]&&d>slack[i])d=slack[i];
for(i=;i<=n;i++)if(visx[i])lx[i]-=d;
for(i=;i<=n;i++)
if(visy[i])ly[i]+=d;else slack[i]-=d;
}
}
int result = ;
for(i=;i<=n;i++)if(linky[i]>-)result+=w[linky[i]][i];
return result;
} int main()
{
while(scanf("%d",&n)==)
{
int cost;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
scanf("%d",&cost);
w[i][j]=cost;
}
printf("%d\n",KM());
}
return ;
}
hdu_2255_奔小康赚大钱(KM带权二分匹配板子)的更多相关文章
- HDU 2255 奔小康赚大钱(带权二分图最大匹配)
HDU 2255 奔小康赚大钱(带权二分图最大匹配) Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊 ...
- hdu2255 奔小康赚大钱 km算法解决最优匹配(最大权完美匹配)
/** 题目:hdu2255 奔小康赚大钱 km算法 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:lv 思路:最优匹配(最大权完美匹配) ...
- Hdu2255 奔小康赚大钱(二分图最大权匹配KM算法)
奔小康赚大钱 Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好 ...
- hdu 2255 奔小康赚大钱 (KM)
奔小康赚大钱Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdu 2255奔小康赚大钱 KM算法模板
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=2255 一,KM算法:(借助这个题写一下个人对km的理解与km模板) KM算法主要是用来求解图的最优匹 ...
- HDU 2255 奔小康赚大钱 KM算法题解
KM算法求的是完备匹配下的最大权匹配,是Hungary算法的进一步,由于Hungary算法是最大匹配的算法,不带权. 经典算法,想不出来的了,要參考别人的.然后消化吸收吧. 由于真的非常复杂的算法. ...
- hdu-2255 奔小康赚大钱---KM模板
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2255 题目大意: Problem Description 传说在遥远的地方有一个非常富裕的村落,有一 ...
- 【HDU2255】奔小康赚大钱-KM算法
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description ...
- hdu 2255 奔小康赚大钱--KM算法模板
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:有N个人跟N个房子,每个人跟房子都有一定的距离,现在要让这N个人全部回到N个房子里面去,要 ...
随机推荐
- 练习3:修改withdraw 方法
练习目标-使用有返回值的方法:在本练习里,将修改withdraw方法以返回一个布尔值来指示交易是否成功. 任务 1.修改Account类 a.修改deposit 方法返回true(意味所有存款是成功的 ...
- Python 学习笔记10
念念不忘,必有回响. 今天继续学习Python 类.
- Java--重载与重写
父类(Parent): public class Parent { public String name = "parent 父类属性"; public void say(){ S ...
- c#设计模式-单例模式(面试题)
c#设计模式-单例模式 单例模式三种写法: 第一种最简单,但没有考虑线程安全,在多线程时可能会出问题, public class Singleton { private static Singleto ...
- Struts2透过自定义拦截器实现登录之后跳转到原页面
Struts2通过自定义拦截器实现登录之后跳转到原页面 这个功能对用户体验来说是非常重要的.实现起来其实很简单. 拦截器的代码如下: package go.derek.advice; import g ...
- sublime3安装
1.下载安装程序 http://c758482.r82.cf2.rackcdn.com/Sublime%20Text%20Build%203059%20Setup.exe 2.下载注册机 http:/ ...
- tmux commands
最近在学Linux,用到tmux这个命令,看到很多快捷键的介绍,个人觉得不太好用,因此把几个常用的命令记录下来,以便以后学习和使用. 常用tmux commands: tmux ls ...
- 编写一个闹钟和定时关机工具(MFC VS2010)
这个小工具在自己生活当中能用到,运行软件以后,会显示当前的系统时间,然后你可以设定时间,再选择是定时响铃还是关机.截图如下: 前言:本程序采用visual studio 2010 ,对话框类型的应用程 ...
- hdu_5794_A Simple Chess(lucas+dp)
题目链接:hdu_5794_A Simple Chess 题意: 给你n,m,从(1,1)到(n,m),每次只能从左上到右下走日字路线,有k(<=100)的不能走的位置,问你有多少方案 题解: ...
- stream_context_create
stream_context_create作用:创建并返回一个文本数据流并应用各种选项,可用于fopen(),file_get_contents()等过程的超时设置.代理服务器.请求方式.头信息设置的 ...