题解:

见图

按照每一个位置上有相同加一

然后km

代码:

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
char s[],q[N][];
int cnt,a[N][N],z,e,cas,b[N*N];
int visr[N],T,x,y,exl[N],exr[N],visl[N],match[N],slack[N],n,m;
int in(char s[])
{
for (int i=;i<=cnt;i++)
if (q[i][]==s[])return i;
q[++cnt][]=s[];
return cnt;
}
int dfs(int x)
{
visl[x]=;
for (int i=;i<=m;i++)
if (!visr[i])
{
int k=exl[x]+exr[i]-a[x][i];
if (k==)
{
visr[i]=;
if (!match[i]||dfs(match[i]))
{
match[i]=x;
return ;
}
}
else slack[i]=min(slack[i],k);
}
return ;
}
int km()
{
memset(exl,,sizeof exl);
memset(exr,,sizeof exr);
for (int i=;i<=m;i++)
for (int j=;j<=m;j++)exl[i]=max(exl[i],a[i][j]);
memset(match,,sizeof match);
for (int i=;i<=m;i++)
{
memset(slack,0x3f,sizeof slack);
while ()
{
memset(visl,,sizeof visl);
memset(visr,,sizeof visr);
if (dfs(i))break;
int d=1e9;
for (int j=;j<=m;j++)
if (!visr[j])d=min(d,slack[j]);
for (int j=;j<=m;j++)
if (visl[j])exl[j]-=d;
for (int j=;j<=m;j++)
if (visr[j])exr[j]+=d;
else slack[j]-=d;
}
}
int ans=,flag=;
for (int i=;i<=m;i++)ans+=a[match[i]][i];
return ans;
}
int main()
{
scanf("%d",&T);
while (T--)
{
scanf("%d%d%d",&n,&m,&e);
cnt=;
memset(q,,sizeof q);
for (int i=;i<=n;i++)
{
scanf("%s",s);
b[i]=in(s);
}
while (e--)
{
cnt=;
memset(q,,sizeof q);
memset(a,,sizeof a);
for (int i=;i<=n;i++)
{
scanf("%s",s);
a[b[i]][in(s)]++;
}
printf("%.4lf\n",(double)km()/n);
}
}
}

hdu3718的更多相关文章

  1. HDU3718 Similarity KM

    原文链接http://www.cnblogs.com/zhouzhendong/p/8284763.html 题目传送门 - HDU3718 题意概括 直接描述输入吧 首先一个T(T<15),表 ...

  2. HDU-3718 Similarity

    题目只有26个字母,所以我们新建一个二分图,v[i][j]表示字母i对应字母j时能成功匹配的个数,给这个边矩阵v求个最大匹配就是答案. #include <cstdlib> #includ ...

随机推荐

  1. 国光大力推荐(安利)Deepin15.4

    简介 深度操作系统15.4 Beta(deepin15.4)相比deepin15.3来看,外观上要更加优雅.现在还在内测中,相信不就官网就会发布正式版.小子昨天下午删了我的windows10,特意来尝 ...

  2. 对象转化为 xml字符串

    public static string ToXml<T>(this T o) where T : new() { string retVal; using (var ms = new M ...

  3. 寻路算法A*, JPS(跳点搜索)的一些杂谈

    A*是一个比较经典的启发式寻路算法.是基于dijkstra算法,但是加入了启发函数,使路径搜索效率更高.实现起来很简单.不过要做到通用性高,比如支持各种不同类型的地图,甚至不仅仅是地图,而是个图结构如 ...

  4. nginx windows版本 1024限制

    Windows版本因为文件访问句柄数被限制为1024了,当访问量大时就会无法响应. 会有如下错误提示:maximum number of descriptors supported by select ...

  5. tab标签 插件 by 腾讯 jianminlu

    /** * @version 0.1 * @author jianminlu * @update 2013-06-19 15:23 */ (function ($) { /** * @name tab ...

  6. 照着官网来安装openstack pike之创建并启动instance

    有了之前组件(keystone.glance.nova.neutron)的安装后,那么就可以在命令行创建并启动instance了 照着官网来安装openstack pike之environment设置 ...

  7. 【前端】display: box布局教程 [转]

    css display:box 新属性   一.display:box; 在元素上设置该属性,可使其子代排列在同一水平上,类似display:inline-block;. 二.可在其子代设置如下属性 ...

  8. 【乱码】Request QueryString 编码,传值乱码的几种情况和解决办法(单页,多页)

    自己的项目还好,合作接口神马的传值乱码是很常见的. 遇到了几次这种恶心情况,积累了一点经验,有不对的地方欢迎指正. 乱码原因: 一般来说,常用的编码不是utf-8就是gb2312,一样的 HttpUt ...

  9. sa learning

    后缀数组之前一直在给队友搞,但是这个类太大了,预感到青岛八成会有,于是自己也学习一下,记录一下做题的历程 所用的模板暂时来自于队友的倍增nlogn da算法 int t1[maxn] , t2[max ...

  10. GridControl 史上最全的资料(二)

    GridControl详解(四)分组排序汇总 分组: 按时间分第一组: 按性别分第二组: 显示结果: 高级设置: 将所有组展开代码:gridView1.ExpandAllGroups(); 显示结果: ...