KM HDU 3718
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std; #define MAXN 50
#define inf 65553566
int love[MAXN][MAXN]; /// 记录每个妹子和每个男生的好感度
int ex_girl[MAXN]; /// 每个妹子的期望值
int ex_boy[MAXN]; /// 每个男生的期望值
bool vis_girl[MAXN]; /// 记录每一轮匹配匹配过的女生
bool vis_boy[MAXN]; /// 记录每一轮匹配匹配过的男生
int match[MAXN]; /// 记录每个男生匹配到的妹子 如果没有则为-1
int slack[MAXN]; /// 记录每个汉子如果能被妹子倾心最少还需要多少期望值 double ans[];
char s[],tmp[];
int n,k,m,sum; ///为女孩找匹配的男孩
int find(int girl)
{
vis_girl[girl]=;
for(int boy=;boy<;boy++)
{
if(vis_boy[boy]) continue;///如果男孩已经被标记过,则找下一个
int gap=ex_girl[girl]+ex_boy[boy]-love[girl][boy];///看差距
if(gap==)
{
vis_boy[boy]=;
if(match[boy]==-||find(match[boy]))///如果男孩未匹配过或者该男孩的妹子可以找其他人
{
match[boy]=girl;///将女孩匹配给男
return ;
}
}
else
{
slack[boy]=min(slack[boy],gap);
}
}
return ;
}
int KM(int n)
{ memset(match,-,sizeof(match));
memset(ex_boy,,sizeof(ex_boy)); ///每个女生的初始期望值是与他相连的男生最大的好感度
for(int i=;i<n;i++)
{
ex_girl[i]=love[i][];
for(int j=;j<n;j++)
{
ex_girl[i]=max(ex_girl[i],love[i][j]);
}
}
///尝试为每个女孩匹配男孩
for(int i=;i<n;i++)
{
fill(slack,slack+n,inf);
while()
{ /// 为每个女生解决归宿问题的方法是 :如果找不到就降低期望值,直到找到为止
///记录每轮匹配中南海女孩是否被尝试匹配过
memset(vis_girl,,sizeof(vis_girl));
memset(vis_boy,,sizeof(vis_boy));
if(find(i)) break;///如果发现该女孩已经找到归宿,就进行下一个女孩
int d=inf;
for(int j=;j<n;j++)
if(!vis_boy[j])///看该男孩如果没有匹配的,就将最小的期望值给他
d=min(d,slack[j]); for(int j=;j<n;j++)
{
if(vis_girl[j])///如果女孩已经匹配,则女孩的期望值减去
ex_girl[j]-=d;
if(vis_boy[j])
ex_boy[j]+=d;
}
}
}
int sum=;
for(int j=;j<n;j++)
sum+=love[match[j]][j];
return sum; }
int main()
{
int t;
int i,j;
char str[];
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&k,&m);
for(i=;i<n;i++)
{
scanf("%s",str);
s[i]=str[];
}
//s[i]='\0';
for(i=;i<m;i++)
{
memset(love,,sizeof(love));
for(j=;j<n;j++)
{
scanf("%s",str);
tmp[j]=str[];
}
//tmp[j]='\0';
for(j=;j<n;j++)
{
love[s[j]-'A'][tmp[j]-'A']++;
}
int res=KM();
ans[i]=1.0*res/n; }
for(i=;i<m;i++)
printf("%.4lf\n",ans[i]); }
}
KM HDU 3718的更多相关文章
- HDU 3718 Similarity(KM最大匹配)
HDU 3718 Similarity 题目链接 题意:给定一个标准答案字符串,然后以下每一行给一个串.要求把字符一种相应一种,要求匹配尽量多 思路:显然的KM最大匹配问题,位置相应的字符连边权值+1 ...
- hdu 3718
一个二分图最大匹配的题: 匈牙利算法不熟: 建了个模,用最小费用最大流解决了 #include <iostream> #include <cstring> #define IN ...
- hdu 3718 Different Division
Different Division Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU 2853 最大匹配&KM模板
http://acm.hdu.edu.cn/showproblem.php?pid=2853 这道题初看了没有思路,一直想的用网络流如何解决 参考了潘大神牌题解才懂的 最大匹配问题KM 还需要一些技巧 ...
- HDU 2853 (KM最大匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2853 题目大意:二分图匹配费用流.①最大匹配②最小原配变动 解题思路: 如果去掉第二个要求,那么就是裸 ...
- 【HDU 2853】 KM算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2853 题意:有n个公司,m个任务,每个公司做每个任务都有一个效率值,最开始每个公司都指派了一个任务,现 ...
- 奔小康赚大钱 hdu 2255( KM )
http://acm.split.hdu.edu.cn/showproblem.php?pid=2255 带权匹配问题: #include <stdio.h> #include <a ...
- hdu 2255 奔小康赚大钱--KM算法模板
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:有N个人跟N个房子,每个人跟房子都有一定的距离,现在要让这N个人全部回到N个房子里面去,要 ...
- HDU 2255 & KM模板
题意: 一张完备二分图求最优完备匹配. SOL: 这题就不讲什么sol了...毕竟是裸的KM,不会的话可以看老人家的大白鼠,一些问题看代码注释.讲讲经历(悲惨的经历) 刚打完,自信地交上去发现MLE. ...
随机推荐
- hdu1045 - 贪心,二分图
题目链接 左边白方格里放小球,满足同一行.列只有一个(被黑块隔开).问最多放多少个球. -------------------------------------------------------- ...
- hiho1116 - 数据结构 线段树(区间合并)
题目链接 现在有一个有n个元素的数组a1, a2, ..., an. 记f(i, j) = ai * ai+1 * ... * aj. 初始时,a1 = a2 = ... = an = 0,每次我会修 ...
- php查询字符串是否存在 strpos
/*** 查询字符是否存在于某字符串** @param $haystack 字符串* @param $needle 要查找的字符* @return bool*/function str_exists( ...
- 使用TensorFlow编写常用模块的Python代码示例
将数据转化成tfrecords的形式 import os import tensorflow as tf import numpy as np import matplotlib.image as m ...
- java的selenium环境搭建
1.下载jdk1.8 环境变量我的博客有我就不说 selenium下载地址:http://npm.taobao.org/mirrors/selenium 2.下 ...
- [NOIP补坑计划]NOIP2012 题解&做题心得
场上预计得分:100+90+70+100+100+3060=490520(省一分数线245) 题解: D1T1 Vigenère 密码 题面 水题送温暖~~ #include<iostream& ...
- [NOIP2011提高组]Mayan游戏
题目:洛谷P1312.Vijos P1738.codevs1136. 题目大意:在一个7行5列的棋盘(左下角坐标0,0)上,有一些不同颜色的棋子. 规定某一时刻,连续三个横排或竖列的棋子颜色相同,则它 ...
- 紫书 例题8-14 UVa 1607 (二分)
题意非常难理解-- #include<cstdio> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namesp ...
- Tomcat + Mysql高并发配置优化
1.Tomcat优化配置 (1)更改Tomcat的catalina.bat 将java变成server模式,增大jvm的内存,在文件开始位置增加 setJAVA_OPTS=-server -Xms10 ...
- less02-变量
html <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF- ...