hdu_2255_奔小康赚大钱(KM带权二分匹配板子)

时间:2022-10-19 20:11:27

题目连接: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算法解决最优匹配&lpar;最大权完美匹配&rpar;

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

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

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

  4. hdu 2255 奔小康赚大钱 &lpar;KM&rpar;

    奔小康赚大钱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. 数据结构&lpar;主席树&rpar;:COGS 2211&period; 谈笑风生

    2211. 谈笑风生 ★★★★   输入文件:laugh.in   输出文件:laugh.out   简单对比时间限制:3 s   内存限制:512 MB [问题描述] 设T 为一棵有根树,我们做如下 ...

  2. Java常量笔记

    在添加文件名的同时,文件名和内容可以不相同!! 1·Java 常量 常量就是固定不变的量,一旦被定义,它的值就不能被改变. 例实: 书中的代码不全,在这里不补充一下: 书中的源代码: public c ...

  3. H2Engine服务器引擎介绍

    H2Engine服务器引擎介绍 简介 H2Engine服务器引擎架构是轻量级的,与其说是引擎,个人觉得称之为平台更为合适.因为它封装的功能非常精简,但是提供了非常简洁方便的扩展机制,使得可以用C++. ...

  4. 清除float影响

    条件: 父元素中有子元素float的话,可能就会影响父元素的高度,从而影响布局: 解决方案: 1.直接给父元素定高: 弊端:必须知道父元素的高: 2. 父元素使用overflow属性值为hidden解 ...

  5. 动态字段列表实现及List&lt&semi;T&gt&semi;排序

    public class StudentCardSortHelper<T> { //itemName 要排序的字段名 public static List<StudentCard&g ...

  6. python爬虫-淘宝商品密码(图文教程附源码)

    今天闲着没事,不想像书上介绍的那样,我相信所有的数据都是有规律可以寻找的,然后去分析了一下淘宝的商品数据的规律和加密方式,用了最简单的知识去解析了需要的数据. 这个也让我学到了,解决问题的方法不止一个 ...

  7. &lbrack;hgoi&num;2019&sol;3&sol;3&rsqb;赛后总结

    T1--最长公共前缀(lcp) 定义两个字符串S,T 的最长公共前缀lcp(S,T)为最长的字符串R,满足R 既是S 的前缀又是T 的前缀. 给定一个字符串S,下标从1 开始,每次询问给出四个正整数a ...

  8. python【数据类型:字符串】

    print("欢迎登录".center(10,"*")) #结果输出:***欢迎登录*** isalpha()方法:如果字符串至少有一个字符并且所有字符都是字母 ...

  9. Python学习札记&lpar;三十五&rpar; 面向对象编程 Object Oriented Program 6

    参考:实例属性和类属性 NOTE Python是动态语言,根据类创建的实例可以任意绑定属性. class Student(object): def __init__(self, name): self ...

  10. 51nod 1677 treecnt&lpar;思维&rpar;

    题意: 给定一棵n个节点的树,从1到n标号.选择k个点,你需要选择一些边使得这k个点通过选择的边联通,目标是使得选择的边数最少. 现需要计算对于所有选择k个点的情况最小选择边数的总和为多少. 考虑每条 ...