Lightoj1011【KM算法】
题意:
问男孩女孩最大的可能值?其实就是一个二分图的最大权值匹配问题;模板题吧。。
- #include<cstdio>
- #include<math.h>
- #include<queue>
- #include<map>
- #include<string>
- #include<string.h>
- #include<iostream>
- #include<algorithm>
- using namespace std;
- typedef long long LL;
- const int INF=0x3f3f3f3f;
- const LL mod=1e9+7;
- const int N=20;
- int ma[N][N];
- int lx[N],ly[N],match[N];
- bool vx[N],vy[N];
- int n,d;
- bool Findpath(int u)
- {
- vx[u]=1;
- for(int i=1;i<=n;i++)
- {
- if(vy[i]) continue;
- int temp=lx[u]+ly[i]-ma[u][i];
- if(temp==0)
- {
- vy[i]=1;
- if(match[i]==-1||Findpath(match[i]))
- {
- match[i]=u;
- return true;
- }
- }
- else if(d>temp)
- d=temp;
- }
- return false;
- }
- int KM()
- {
- memset(match,-1,sizeof(match));
- memchr(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(lx[i],ma[i][j]);
- for(int i=1;i<=n;i++)
- {
- while(1)
- {
- memset(vx,0,sizeof(vx));
- memset(vy,0,sizeof(vy));
- d=INF;
- if(Findpath(i))
- break;
- for(int j=1;j<=n;j++)
- {
- if(vx[j]) lx[j]-=d;
- if(vy[j]) ly[j]+=d;
- }
- }
- }
- int res=0;
- for(int i=1;i<=n;i++)
- res+=ma[match[i]][i];
- return res;
- }
- int main()
- {
- int cas=1,T;
- scanf("%d",&T);
- while(T--)
- {
- scanf("%d",&n);
- for(int i=1;i<=n;i++)
- for(int j=1;j<=n;j++)
- {
- scanf("%d",&ma[i][j]);
- }
- printf("Case %d: ",cas++);
- printf("%d\n",KM());
- }
- return 0;
- }
Lightoj1011【KM算法】的更多相关文章
- 匈牙利算法与KM算法
匈牙利算法 var i,j,k,l,n,m,v,mm,ans:longint; a:..,..]of longint; p,f:..]of longint; function xyl(x,y:long ...
- 【HDU2255】奔小康赚大钱-KM算法
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description ...
- HDU2255-奔小康赚大钱-二分图最大权值匹配-KM算法
二分图最大权值匹配问题.用KM算法. 最小权值的时候把权值设置成相反数 /*-------------------------------------------------------------- ...
- KM算法及其优化的学习笔记&&bzoj2539: [Ctsc2000]丘比特的烦恼
感谢 http://www.cnblogs.com/vongang/archive/2012/04/28/2475731.html 这篇blog里提供了3个链接……基本上很明白地把KM算法是啥讲清楚 ...
- poj 2195 KM算法
题目链接:http://poj.org/problem?id=2195 KM算法模板~ 代码如下: #include "stdio.h" #include "string ...
- hdu 2255 奔小康赚大钱--KM算法模板
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:有N个人跟N个房子,每个人跟房子都有一定的距离,现在要让这N个人全部回到N个房子里面去,要 ...
- HDU(2255),KM算法,最大权匹配
题目链接 奔小康赚大钱 Time Limit: 1000/1000MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- 二分图 最大权匹配 km算法
这个算法的本质还是不断的找增广路: KM算法的正确性基于以下定理:若由二分图中所有满足A[i]+B[j]=w[i,j]的边(i,j)构成的子图(称做相等子图)有完备匹配,那么这个完备匹配就是二分图的最 ...
- hdu 2255 奔小康赚大钱 KM算法
看到这么奇葩的题目名我笑了,后来这么一个裸的KM调了2小时我哭了…… 这是个裸的KM算法,也没什么多说的,主要是注意多组数据时,每次都要把各种数组清空啊,赋值啊什么的,反正比较麻烦.至于为什么调了2小 ...
- hdu 2853 Assignment KM算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2853 Last year a terrible earthquake attacked Sichuan ...
随机推荐
- 使用C#解决部分Win8.1系统窗体每隔几秒失去焦点的问题
使用了Win8.1 With Update 1后,发现重新启动系统后,当前激活的窗体总是每隔几秒失去焦点.过0.5~1秒焦点回来.导致输入无法正常工作,严重影响使用心情和效率. 在网上找了非常久,也没 ...
- 九度OJ 1131:合唱队形 (DP、最长上升下降序列)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2865 解决:881 题目描述: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形. ...
- [数据挖掘课程笔记]SLIQ算法
1.数据结构 主要的数据结构有:1.Attribute List 2.Class List 对于数据集,每一个属性都有一个对应的Attribute List.如上图所示,每个Attribute Li ...
- office web apps的搭建部署(1)(写于2017.12.27)
因为业务方面的需求,项目要求搭建office-web-apps这个玩意儿,做一个在线预览编辑的功能,为了方便,我下面都用OWA代替这个服务. 首先说一下什么是office-web-apps-serve ...
- ThinkPHP RBAC权限管理机制
RBAC是ThinkPHP很好用的后台权限管理的,话不多说,实现方法如下,也方便以后自己查询使用: 1.新建4个数据库表 self_role权限表 CREATE TABLE `self_role` ( ...
- zookeeper+dubbo【转载】
转载地址:http://ahua186186.iteye.com/blog/1912421 注:zookeeper集群是myid文件是没有后缀名的. 转自: http://www.verydemo.c ...
- AutoItLibrary安装和常见问题解决
http://blog.csdn.net/bible_reader/article/details/52044345
- 存储过程系列三:根据表别名方式distinct去重插入
1.根据表别名方式distinct去重插入 insert into GG_XKZ_YLQXSCXKESL_SCDZ ( bzj, xkzid, sqid, jtdz, szsf, ...
- 编码 —— PCM 编码
PCM:Pulse Code Modulation,脉冲编码调制: 1. 码率的计算 PCM约定俗成了无损编码,因为PCM代表了数字音频中最佳的保真水准,并不意味着PCM就能够确保信号绝对保真,PCM ...
- Opencv— — Bias and Gain
// define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...