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个房子里面去,要 ...
随机推荐
- C#第五天
引用命名空间快捷键:Shift + Alt +F10: 值类型和引用类型: 区别: 1,值类型和引用类型在内存上存储的地方不一样: 2.在传递值类型和传递引用类型的时候,传递的方式不一样.值类型我们称 ...
- 关于css的hack问题
<!--[if <keywords>? IE <version>?]> HTML代码块 <![endif]--> 取值: <keywords> ...
- HTTP SOAP Request
public string SoapRequest(string url, string message, string type, Encoding encoding) { string resul ...
- 自定义silverlight中datagrid的排序事件
<sdk:DataGrid AutoGenerateColumns="False" CanUserSortColumns="False" CanUserR ...
- TCP小结
TCP/IP协议实现了不同主机,不同操作系统之间信息交流.由4层构成,从上往下依次为: 1.应用层,包括http,ftp等协议,用于实现某一项具体的功能. 2.传输层,包括TCP和UDP,一个可靠,一 ...
- 把luasocket集成到c++中
建一个项目pro_test,创建一个运行目录test: 把luasocket/src文件夹中的*.lua拷贝到test/src文件夹中: 把socket.dll,mime.dll,lua5.1.dll ...
- QTP脚本程序(原创自编)
'编写哨位台程序测试脚本,实现功能如下:'1.自动添加100条查哨换岗人员记录,'2.自动添加美电.海康,大华视频.'3.自动配置视频设备.'4.检查后台进程是否存在.'5.视频轮巡.'####### ...
- win7系统,apache2.2下添加PHP5的配置详解
首先要说apache(服务器). php(开发语言). mysql(数据库) 之间的关系. Apache:为系统提供了Web服务支持,网站:http://www.apache.org/ PHP:为系统 ...
- csu1010: Water Drinking
/* 本题的题意: 沙漠中有很多骆驼和一个池塘,0表示池塘,1-N表示骆驼,输入的两个数表示两只骆驼,其中前面的那一头靠近池塘,所有的骆驼队列不交叉不相连,求站在队尾但是离水井最近的骆驼编号 经过分析 ...
- php编译错误Note that the MySQL client library is not bundled anymore!
Note that the MySQL client library is not bundled anymore! 解决方法. 1. 查看系统有没有安装mysql header find / -na ...