题目连接: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带权二分匹配板子)的更多相关文章

  1. HDU 2255 奔小康赚大钱(带权二分图最大匹配)

    HDU 2255 奔小康赚大钱(带权二分图最大匹配) Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊 ...

  2. hdu2255 奔小康赚大钱 km算法解决最优匹配(最大权完美匹配)

    /** 题目:hdu2255 奔小康赚大钱 km算法 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:lv 思路:最优匹配(最大权完美匹配) ...

  3. Hdu2255 奔小康赚大钱(二分图最大权匹配KM算法)

    奔小康赚大钱 Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好 ...

  4. hdu 2255 奔小康赚大钱 (KM)

    奔小康赚大钱Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  5. hdu 2255奔小康赚大钱 KM算法模板

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=2255 一,KM算法:(借助这个题写一下个人对km的理解与km模板) KM算法主要是用来求解图的最优匹 ...

  6. HDU 2255 奔小康赚大钱 KM算法题解

    KM算法求的是完备匹配下的最大权匹配,是Hungary算法的进一步,由于Hungary算法是最大匹配的算法,不带权. 经典算法,想不出来的了,要參考别人的.然后消化吸收吧. 由于真的非常复杂的算法. ...

  7. hdu-2255 奔小康赚大钱---KM模板

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2255 题目大意: Problem Description 传说在遥远的地方有一个非常富裕的村落,有一 ...

  8. 【HDU2255】奔小康赚大钱-KM算法

    Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description ...

  9. hdu 2255 奔小康赚大钱--KM算法模板

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:有N个人跟N个房子,每个人跟房子都有一定的距离,现在要让这N个人全部回到N个房子里面去,要 ...

随机推荐

  1. 网络传输中的三张表,MAC地址表、ARP缓存表以及路由表

    一:MAC地址表详解 说到MAC地址表,就不得不说一下交换机的工作原理了,因为交换机是根据MAC地址表转发数据帧的.在交换机中有一张记录着局域网主机MAC地址与交换机接口的对应关系的表,交换机就是根据 ...

  2. oracle创建数据库表空间

    1.创建表空间(存放数据) create tablespace xtba_datadatafile 'F:\ORACLE\ORADATA\ORCL\XTBA.DBF'size 50mautoexten ...

  3. C#用Zlib压缩或解压缩字节数组

    /// <summary> /// 复制流 /// </summary> /// <param name="input">原始流</par ...

  4. Android Development HandBook-Android Studio 特别篇

    开发准备中http://www.cnblogs.com/dev2007/p/4059829.html 主要介绍了基础环境的搭建,开发工具主要是Eclipse,由于Android Studio使用越来越 ...

  5. C语言_数字排列顺序

    #include <stdio.h> #include <stdlib.h> #define LENGTH 8 void main() { , , , , , , , }; ; ...

  6. MFC中获取系统当前时间

    1.使用CTime类 CString str; //获取系统时间 CTime tm; tm=CTime::GetCurrentTime(); str=tm.Format("现在时间是%Y年% ...

  7. gerrit push配置

    第一种方法: 在home目录下,编辑.gitconfig文件,添加 [remote "review"] url = ssh://someone@oneip:port/project ...

  8. js调用函数的格式

    如题 onclick='alert(\""+"&#1"+"\")' onclick='alert(encodeURIComponen ...

  9. 关于PHP静态方法调用和实例化类调用的区别

    1.首先来澄清一些观点 由于静态方法在内存中只有一份,无论你调用多少次,都是共用的,而且没有对象的概念,所以不能在静态方法里面使用$this调用,如果非得调用的话,只能实例化自身类 而实例化不一样,每 ...

  10. 多个dropdownlist只有第一个能选中,其他选不中之我见

    前段时间遇到这个问题,发现在页面中的源代码已经显示selected=“selected" 可是还是选中的第一项,试过很多办法,都不行,最后只好靠js来解决了,获取所有的dropdownlis ...