奔小康赚大钱---hdu2255(最大带权匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255
带权匹配问题的模板;
运用KM算法;
- #include<stdio.h>
- #include<string.h>
- #include<iostream>
- #include<algorithm>
- #include<math.h>
- #define INF 0xfffffff
- #define N 330
- using namespace std;
- int maps[N][N], visx[N], visy[N], used[N], lx[N], ly[N], s[N], n;
- ///visx[i]代表第i人是否在曾广路上,
- ///used[i]代表第i个村庄是否被占用;
- ///lx[],ly[]代表人和村庄的顶标;
- bool Find(int u)
- {
- visx[u] = ;
- for(int i=; i<=n; i++)
- {
- if(!visy[i] && lx[u]+ly[i] == maps[u][i])
- {
- visy[i] = ;
- if(!used[i] || Find(used[i]))
- {
- used[i]=u;
- return true;
- }
- }
- else
- {
- s[i] = min(s[i], lx[u]+ly[i] - maps[u][i]);
- }
- }
- return false;
- }
- int KM()
- {
- memset(used, , sizeof(used));
- memset(lx, , sizeof(lx));
- memset(ly, , sizeof(ly));
- for(int i=; i<=n; i++)
- {
- for(int j=; j<=n; j++)
- lx[i] = max(maps[i][j], lx[i]);///初始化人的顶标;
- }
- for(int i=; i<=n; i++)///寻找最大匹配;人
- {
- for(int j=; j<=n; j++)
- s[j]=INF;
- while()
- {
- memset(visx, , sizeof(visx));
- memset(visy, , sizeof(visy));
- if(Find(i))///找到的曾广路就退出,否则改变顶标,找到为止;
- break;
- int d = INF;
- for(int j=; j<=n; j++)
- {
- if(!visy[j])
- d=min(d, s[j]);
- }
- for(int j=; j<=n; j++)
- {
- if(visx[j])
- lx[j]-=d;
- if(visy[j])
- ly[j]+=d;
- }
- }
- }
- int ans=;
- for(int i=; i<=n; i++)
- {
- ans+=maps[used[i]][i];
- }
- return ans;
- }
- int main()
- {
- while(scanf("%d", &n)!=EOF)
- {
- for(int i=; i<=n; i++)
- {
- for(int j=; j<=n; j++)
- scanf("%d", &maps[i][j]);
- }
- printf("%d\n", KM());
- }
- return ;
- }
奔小康赚大钱---hdu2255(最大带权匹配)的更多相关文章
- HDU - 2255 奔小康赚大钱(最大带权匹配)
Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓, ...
- P - 奔小康赚大钱 - hdu 2255(带权值的匹配)
分析:这是一个KM的模板题,也就不多说了,KM最复杂的情况都能过,下面是没有优化过的代码: ****************************************************** ...
- Hdu2255 奔小康赚大钱(二分图最大权匹配KM算法)
奔小康赚大钱 Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好 ...
- (二分匹配 模板 KM)奔小康赚大钱--hdu--2255
链接: http://acm.hdu.edu.cn/showproblem.php?pid=2255 代码: #include <iostream> #include <cstdio ...
- HDU 2255 奔小康赚大钱(带权二分图最大匹配)
HDU 2255 奔小康赚大钱(带权二分图最大匹配) Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊 ...
- hdu_2255_奔小康赚大钱(KM带权二分匹配板子)
题目连接:hdu_2255_奔小康赚大钱 存个板子 /* 其实在求最大 最小的时候只要用一个模板就行了, 把边的权值去相反数即可得到另外一个.求结果的时候再去 相反数即可,最大最小有一些地方不同.. ...
- HDU2255 奔小康赚大钱 (最大权完美匹配) 模板题【KM算法】
<题目链接> 奔小康赚大钱 Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事,关系到人民的住房问题啊 ...
- hdu2255 奔小康赚大钱 km算法解决最优匹配(最大权完美匹配)
/** 题目:hdu2255 奔小康赚大钱 km算法 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:lv 思路:最优匹配(最大权完美匹配) ...
- hdu-2255.奔小康赚大钱(最大权二分匹配)
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
随机推荐
- js点击标签时获取当前标签属性值
document.body.onclick=function(){ var obj = document.elementFromPoint(event.clientX,event.clientY); ...
- struts2零配置參考演示样例
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2 ...
- delphi7中添加QuickRep
具体的方法是: delphi主菜单的Project|Options命令, 在Package选项卡的Desing packages列表中如果可以看到QuickReport Components选项, 那 ...
- Notepad++下载需要的插件(如何在Notepad++中手动下载需要的插件)
需求说明: 下载在实际工作中需要的Notepad++插件,或者是因为Notepadd++设置的原因导致不能直接在软件中显示插件. 即手动登录到指定的链接中进行插件的下载. 操作过程: 1.以xmlto ...
- Excel时间格式修改为文本格式
- easyui------dialog如何固定位置
转载: http://blog.csdn.net/dhdhdh0920/article/details/7438272 代var default_left; var default_top; $('# ...
- Java类的设计----Object 类
Object类 Object类是所有Java类的根父类如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类 public class Person { ... } 等价于: ...
- hadoop程序MapReduce之SingletonTableJoin
需求:单表关联问题.从文件中孩子和父母的关系挖掘出孙子和爷奶关系 样板:child-parent.txt xiaoming daxiong daxiong alice daxiong jack 输出: ...
- office2010如何使用excel冻结窗格
当我们在制作一个Excel表格时,如果列数较多,行数也较多时,一旦向下滚屏,则上面的标题行也跟着滚动,在处理数据时往往难以分清各列数据对应的标题,事实上利用"冻结窗格"功能可以很好 ...
- 正则表达式—RegEx(RegularExpressio)(一)
今日随笔,想和大家分享一下正则表达式的相关知识. 先不说概念性的东西,举一个例子再说. 验证你输入的邮政编码 ,你输入的邮政编码必须是六位的数字. while (true) { Console.Wri ...