http://acm.split.hdu.edu.cn/showproblem.php?pid=2255

带权匹配问题:

#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <vector>
using namespace std;#define maxn 330
#define INF 0xfffffffint maps[maxn][maxn], vx[maxn], vy[maxn], used[maxn], lx[maxn], ly[maxn], s[maxn], n;
///vx[i]代表第i人是否在增广路上
///used[i]代表第i个村庄是否被占用
///lx[],ly[]代表人和村庄的顶标int Find(int u)
{vx[u] = 1;for(int i=1; i<=n; i++){if(!vy[i] && lx[u]+ly[i] == maps[u][i]){vy[i] = 1;if(!used[i] || Find(used[i])){used[i] = u;return 1;}}else{s[i] = min(s[i], lx[u]+ly[i]-maps[u][i]);}}return 0;
}int KM()
{memset(used, 0, sizeof(used));memset(lx, 0, sizeof(lx));memset(ly, 0, sizeof(ly));for(int i=1; i<=n; i++)for(int j=1; j<=n; j++)lx[i] = max(maps[i][j], lx[i]);///初始化人的顶标for(int i=1; i<=n; i++)///寻找最大匹配
    {for(int j=1; j<=n; j++)s[j] = INF;while(1){memset(vx, 0, sizeof(vx));memset(vy, 0, sizeof(vy));if(Find(i))  break;///找到增广路就退出,否则改变顶标,直到找到为止int d = INF;for(int j=1; j<=n; j++){if(!vy[j]) d=min(d, s[j]);}for(int j=1; j<=n; j++){if(vx[j]) lx[j] -= d;if(vy[j]) ly[j] += d;}}}int ans = 0;for(int i=1; i<=n; i++)ans += maps[used[i]][i];return ans;
}int main()
{while(scanf("%d", &n)!=EOF){for(int i=1; i<=n; i++)for(int j=1; j<=n; j++)scanf("%d", &maps[i][j]);printf("%d\n", KM());}return 0;
}

View Code

转载于:https://www.cnblogs.com/daydayupacm/p/5795879.html

奔小康赚大钱 hdu 2255( KM )相关推荐

  1. 奔小康赚大钱 HDU - 2255( 二分图匹配KM算法详解)

    题目 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.  这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百 ...

  2. 二分图最大权匹配问题KM算法讲解 HDU 2255 奔小康赚大钱

    作者:logosG 链接:https://www.cnblogs.com/logosG/p/logos.html (讲解的KM算法,特别厉害!!!) KM算法: 现在我们来考虑另外一个问题:如果每个员 ...

  3. 【HDU 2255】奔小康赚大钱 (最佳二分匹配KM算法)

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

  4. KM算法 最优匹配(最大权匹配) hdu 2255 奔小康赚大钱 最小权匹配 poj 2195 Going Home

    最大权二分匹配问题就是给二分图的每条边一个权值,选择若干不相交的边,得到的总权值最大.解决这个问题可以用KM算法.理解KM算法需要首先理解"可行顶标"的概念.可行顶标是指关于二分图 ...

  5. HDU 2255 奔小康赚大钱 带权二分图匹配 KM算法

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

  6. 二分图最佳匹配 KM算法 Hdu2255奔小康赚大钱 + Poj 3565 Ants

    2014-10-4 更新 在最下面增加了基于邻接表的模板 理论:http://blog.sina.com.cn/s/blog_691ce2b701016reh.html http://philosci ...

  7. HDUOJ 2255 奔小康赚大钱

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

  8. HDUOJ---------2255奔小康赚大钱

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

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

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

最新文章

  1. 美多商城之验证码(异步方案)
  2. 计算机视觉——基本知识概念
  3. 解决嵌套list类型的JSONObject/JSONArray转换成原来list问题。
  4. 论坛高级签名_2020行走的酒窖首届中国(华北)定制白酒高峰论坛在天津盘山举行...
  5. STM32之独立版USB(Host)驱动+MSC+Fatfs移植
  6. 前端学习(1328):服务器基础概念
  7. jquery user interface
  8. Windows 10环境下「MSCOCO Captions」评估代码踩坑记录
  9. 百姓大药房JAVA面试_「老百姓大药房面试|面试题」-看准网
  10. 如何在Linux中符号链接文件? [关闭]
  11. Shell命令打包Android apk
  12. 红帽linux开启vnc服务器,红帽Linux上使用VNC
  13. python的集合是什么_Python集合的概念是什么?Python集合的介绍
  14. wpf给模板控件添加事件一
  15. java替换word空格,java替换word 2007字符串
  16. 原则与思维模型--《思维模型》0
  17. Jmeter-添加PerfMon (Servers Performance Monitoring),报错解决办法
  18. windows7在安装vc14的时候报错(0x80240017)
  19. Sametime SDK
  20. 几分钟教你轻松搞定ALM安装

热门文章

  1. 怎么在js中取java变量的值
  2. javascript之window对象详解
  3. linux命令history
  4. 汇编语言--int指令
  5. 口语学习Day2:今天来说说我的小客厅!
  6. leetcode算法题01
  7. MVP架构设计 进阶三
  8. 如何在云计算平台使用R语言编程的快速入门指南
  9. .NET本质论 类型基础
  10. Notepad++免费开源文本编辑器