二分匹配之最大权值匹配算法---KM模板
大神总结:http://www.cnblogs.com/skyming/archive/2012/02/18/2356919.html
代码:
#include<stdio.h>
#include<string.h>
const int N=,INF=0x3f3f3f3f;
int lx[N],ly[N],vx[N],vy[N],slack[N],match[N];
int a[N][N];
int nx,ny;
int dfs(int u)
{
vx[u]=;
for(int i=;i<=ny;i++)
{
if(vy[i]) continue;
int t=lx[u]+ly[i]-a[u][i];
if(t==)
{
vy[i]=;
if(match[i]==-||dfs(match[i]))
{
match[i]=u;
return ;
}
}
else if(slack[i]>t)
slack[i]=t;
}
return ;
}
int KM()
{
int i,j,d;
memset(ly,,sizeof(ly));
memset(match,-,sizeof(match));
for(i=,lx[i]=-INF;i<=nx;i++)
for(j=;j<=ny;j++)
if(a[i][j]>lx[i])
lx[i]=a[i][j];
for(i=;i<=nx;i++)
{
memset(slack,0x3f,sizeof(slack));
while()
{
memset(vx,,sizeof(vx));
memset(vy,,sizeof(vy));
if(dfs(i)) break;
d=INF;
for(j=;j<=ny;j++)
if(!vy[j]&&slack[j]<d)
d=slack[j];
//if(d==INF) break;//该点找不到任何匹配
for(j=;j<=nx;j++)
if(vx[j])
lx[j]-=d;
for(j=;j<=ny;j++)
{
if(vy[j])
ly[j]+=d;
else
slack[j]-=d;
}
}
}
int ans=,sum=;
for(i=;i<=ny;i++)
if(match[i]>-&&a[match[i]][i])
ans+=a[match[i]][i],sum++;
printf("%d++\n",sum);//匹配数
return ans;
}
int main()
{
int m,u,v,w,n,i;
scanf("%d",&nx);
scanf("%d",&ny);
scanf("%d",&m);
memset(a,,sizeof(a));
while(m--)
{
scanf("%d%d%d",&u,&v,&w);
a[u][v]=a[v][u]=w;
}
printf("%d\n",KM());
return ;
}
二分匹配之最大权值匹配算法---KM模板的更多相关文章
- HDU2255-奔小康赚大钱-二分图最大权值匹配-KM算法
二分图最大权值匹配问题.用KM算法. 最小权值的时候把权值设置成相反数 /*-------------------------------------------------------------- ...
- POJ 2400 Supervisor, Supervisee(KM二分图最大权值匹配)题解
题意:n个老板n个员工,先给你n*n的数据,i行j列代表第i个老板第j喜欢的员工是谁,再给你n*n的数据,i行j列代表第i个员工第j喜欢的老板是谁,如果匹配到第k喜欢的人就会产生一个分数k-1.现在让 ...
- 奔小康赚大钱 HDU - 2255(最大权值匹配 KM板题)
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- hdu 1853 Cyclic Tour (二分匹配KM最小权值 或 最小费用最大流)
Cyclic Tour Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/65535 K (Java/Others)Total ...
- kuangbin带你飞 匹配问题 二分匹配 + 二分图多重匹配 + 二分图最大权匹配 + 一般图匹配带花树
二分匹配:二分图的一些性质 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j ...
- 【HDU 2255】奔小康赚大钱 (最佳二分匹配KM算法)
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- Tour HDU - 3488(最大权值匹配)
Tour In the kingdom of Henryy, there are N (2 <= N <= 200) cities, with M (M <= 30000) one- ...
- hdu 1853 Cyclic Tour 最大权值匹配 全部点连成环的最小边权和
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1853 Cyclic Tour Time Limit: 1000/1000 MS (Java/Others) ...
- poj3565 Ants km算法求最小权完美匹配,浮点权值
/** 题目:poj3565 Ants km算法求最小权完美匹配,浮点权值. 链接:http://poj.org/problem?id=3565 题意:给定n个白点的二维坐标,n个黑点的二维坐标. 求 ...
随机推荐
- Linux 安装 Nginx
1. nginx的安装: 开始学习如何安装nginx,首先安装必要的软件: # yum install libtool # yum install -y gcc-c++ # yum install z ...
- Asp.net发布的CheckList
Asp.net Web 应用程序正式发布前,我们还是做一些检查,所以需要这个CheckList,如下图今天的Asp.net 已演化这样的了: 但不管是什么组件,目前的Web最终还得通过H ...
- SQL Server性能影响的重要结论
第一次访问数据会比接下来的访问慢的多,因为它要从磁盘读取数据然后写入到缓冲区: 聚合查询(sum,count等)以及其他要扫描大部分表或索引的查询需要大量的缓冲,而且如果它导致SQL Server从缓 ...
- 使用正则表达式获取Sql查询语句各项(表名、字段、条件、排序)
string text = "select * from [admin] where aa=1 and cc='b' order by aa desc "; Regex reg = ...
- 【GOF23设计模式】原型模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_原型模式.prototype.浅复制.深复制.Cloneable接口 浅复制 package com.test.prot ...
- js封装tab标签页
<html> <head> <title></title> <meta charset="UTF-8"> <sty ...
- HTML5&CSS3经典动态表单-2
上一个demo效果没出来!实际如下 代码没问题.不知道为啥,展示的demo里光标获取焦点的时候不会有如下效果
- ASP.NET MVC:窗体身份验证及角色权限管理示例
ASP.NET MVC 建立 ASP.NET 基础之上,很多 ASP.NET 的特性(如窗体身份验证.成员资格)在 MVC 中可以直接使用.本文旨在提供可参考的代码,不会涉及这方面太多理论的知识. 本 ...
- UISegmentedControl的使用
#import "SegmentedControlTestViewController.h" @implementation SegmentedControlTestViewCon ...
- 【原】自定义UINavigationItem的两种方法以及相应的隐藏方法
第一种: UIImage *searchimage=[UIImage imageNamed:@"search.png"]; UIBarButtonItem *barbtn=[[[U ...