KM算法 PK 最小费用最大流
用到了KM算法 ,发现自己没有这个模板,搜索学习一下上海大学final大神,http://www.cnblogs.com/kuangbin/p/3228861.html
- #include <stdio.h>
- #include <algorithm>
- #include <string.h>
- #include <iostream>
- using namespace std;
- /* KM算法
- * 复杂度O(nx*nx*ny)
- * 求最大权匹配
- * 若求最小权匹配,可将权值取相反数,结果取相反数
- * 点的编号从0开始
- */
- const int N = ;
- const int INF = 0x3f3f3f3f;
- int nx,ny;//两边的点数
- int g[N][N];//二分图描述
- int linker[N],lx[N],ly[N];//y中各点匹配状态,x,y中的点标号
- int slack[N];
- bool visx[N],visy[N];
- bool DFS(int x)
- {
- visx[x] = true;
- for(int y = ; y < ny; y++)
- {
- if(visy[y])continue;
- int tmp = lx[x] + ly[y] - g[x][y];
- if(tmp == )
- {
- visy[y] = true;
- if(linker[y] == - || DFS(linker[y]))
- {
- linker[y] = x;
- return true;
- }
- }
- else if(slack[y] > tmp)
- slack[y] = tmp;
- }
- return false;
- }
- int KM()
- {
- memset(linker,-,sizeof(linker));
- memset(ly,,sizeof(ly));
- for(int i = ;i < nx;i++)
- {
- lx[i] = -INF;
- for(int j = ;j < ny;j++)
- if(g[i][j] > lx[i])
- lx[i] = g[i][j];
- }
- for(int x = ;x < nx;x++)
- {
- for(int i = ;i < ny;i++)
- slack[i] = INF;
- while(true)
- {
- memset(visx,false,sizeof(visx));
- memset(visy,false,sizeof(visy));
- if(DFS(x))break;
- int d = INF;
- for(int i = ;i < ny;i++)
- if(!visy[i] && d > slack[i])
- d = slack[i];
- for(int i = ;i < nx;i++)
- if(visx[i])
- lx[i] -= d;
- for(int i = ;i < ny;i++)
- {
- if(visy[i])ly[i] += d;
- else slack[i] -= d;
- }
- }
- }
- int res = ;
- for(int i = ;i < ny;i++)
- if(linker[i] != -)
- res += g[linker[i]][i];
- return res;
- }
- //HDU 2255
- int main()
- {
- int n;
- while(scanf("%d",&n) == )
- {
- for(int i = ;i < n;i++)
- for(int j = ;j < n;j++)
- scanf("%d",&g[i][j]);
- nx = ny = n;
- printf("%d\n",KM());
- }
- return ;
- }
end
KM算法 PK 最小费用最大流的更多相关文章
- 经典贪心算法(哈夫曼算法,Dijstra单源最短路径算法,最小费用最大流)
哈夫曼编码与哈夫曼算法 哈弗曼编码的目的是,如何用更短的bit来编码数据. 通过变长编码压缩编码长度.我们知道普通的编码都是定长的,比如常用的ASCII编码,每个字符都是8个bit.但在很多情况下,数 ...
- hdu 1533 Going Home 最小费用最大流
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1533 On a grid map there are n little men and n house ...
- hdu 3395(KM算法||最小费用最大流(第二种超级巧妙))
Special Fish Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- hdu 3488(KM算法||最小费用最大流)
Tour Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submis ...
- hdu 1853 Cyclic Tour (二分匹配KM最小权值 或 最小费用最大流)
Cyclic Tour Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/65535 K (Java/Others)Total ...
- hdoj 1533 Going Home 【最小费用最大流】【KM入门题】
Going Home Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- 图论算法-最小费用最大流模板【EK;Dinic】
图论算法-最小费用最大流模板[EK;Dinic] EK模板 const int inf=1000000000; int n,m,s,t; struct node{int v,w,c;}; vector ...
- 算法笔记--最大流和最小割 && 最小费用最大流 && 上下界网络流
最大流: 给定指定的一个有向图,其中有两个特殊的点源S(Sources)和汇T(Sinks),每条边有指定的容量(Capacity),求满足条件的从S到T的最大流(MaxFlow). 最小割: 割是网 ...
- POJ 3680 Intervals 最小费用最大流(MCMF算法)
题意:给出 n ,k 表示接下来给你 n 段开区间,每段区间都有它的权值,问选出一些区间,使它的权值最大,并且在实轴上的每个点,不得超过 k次被覆盖. 思路:首先要理解建图思路,首先有一个基图,相邻点 ...
随机推荐
- OpenCV——归一化函数normalize
函数原型: void cv::normalize(InputArry src,InputOutputArray dst,double alpha=1,double beta=0,int norm_ty ...
- odoo 打印格式中 打印第一个数据默认
<table style="width:100%;"> <tr> <td style="word-wrap:break-word;width ...
- iOS开发之使用UIView-Positioning简化页面布局
使用过代码布局的人可能会有这样的感觉,给控件设置frame的时候比较繁琐.最 近在Github上看到有一个UIView的一个分类UIView-Positioning,这个分类提供了一些属性,比如lef ...
- [笔记] Redis的安装与配置超级详细
目录 Windows下安装与配置 下载 安装 验证安装 配置服务 测试 Linux下安装与配置 准备工作 安装 验证与测试 Macox下安装与配置 准备工作 安装 验证与测试 Redis 在 Wind ...
- 2017-2018-2 20155224『网络对抗技术』Exp8:Web基础
实践具体要求 Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. Web前端javascipt(0.5分) 理 ...
- JAVA eclipse Maven项目红叹号解决方案
我是通过 Windows --> show view --> problems 查看到发现 ch.qos.logback 1.1.1 出现了错误, 于是我换成了 ch.qos.logbac ...
- JavaScript快速入门-ECMAScript本地对象(RexExp)
一.概述 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具. 正则表达式是由一个字符序列形成的搜索模式. 当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容. 正则表达式 ...
- 设计模式 笔记 迭代器模式 Iterator
//---------------------------15/04/26---------------------------- //Iterator 迭代器模式----对象行为型模式 /* 1:意 ...
- 巧用cheerio重构grunt-inline
grunt-inline是楼主之前写的一个插件,主要作用是把页面带了__inline标记的资源内嵌到html页面去.比如下面的这个script标签. <script src="main ...
- NodeMCU学习(三) : 进入网络世界
把NodeMCU连接到路由器网络上 NodeMCU可以被配置为Station模式和softAP模式或者Station + AP模式,当它被配置为Station模式时,就可以去连接Access Poin ...