hdu 3718 KM最优匹配
来源:互联网 发布:vscode git 记住密码 编辑:程序博客网 时间:2024/05/16 09:00
建图过程,上面一行字母与下面一行一一对应连边,再利用KM求一个最优匹配即可
#include<stdio.h>#include<string.h>#include<string>#include<vector>#include<stdlib.h>using namespace std;#define MIN(a,b) a<b?a:b#define INF 999999#define MAX 50int match[MAX];bool sx[MAX],sy[MAX];int lx[MAX],ly[MAX],map[MAX][MAX];bool path(int u){ sx[u]=true; for(int v=0;v<26;v++) if(!sy[v]&&lx[u]+ly[v]==map[u][v]) { sy[v]=true; if(match[v]==-1||path(match[v])) { match[v]=u; return true; } } return false;}int KM(int n){ int i,j; for(i=0;i<n;i++) { lx[i]=-INF; ly[i]=0; for(j=0;j<n;j++) if(lx[i]<map[i][j]) lx[i]=map[i][j]; } memset(match,-1,sizeof(match)); for(int u=0;u<n;u++) while(1) { memset(sx,0,sizeof(sx)); memset(sy,0,sizeof(sy)); if(path(u)) break; int dmin=INF; for(i=0;i<n;i++) if(sx[i]) for(j=0;j<n;j++) if(!sy[j]) dmin=MIN(lx[i]+ly[j]-map[i][j],dmin); for(i=0;i<n;i++) { if(sx[i]) lx[i]-=dmin; if(sy[i]) ly[i]+=dmin; } } int sum=0; for(j=0;j<n;j++) sum+=map[match[j]][j]; return sum;}void init(int n){ int i,j; for(i=0;i<n;i++) for(j=0;j<n;j++) { if(!map[i][j]) map[i][j]=INF; }}char s[10010],tmp[10010];double ans[35];int main(){ int i,j; int t,n,k,m; char str[5]; scanf("%d",&t); while(t--) { scanf("%d%d%d",&n,&k,&m); for(i=0;i<n;i++) { scanf("%1s",str); s[i]=str[0]; } s[i]='\0';//printf("%s\n",s); for(i=0;i<m;i++) { memset(map,0,sizeof(map)); for(j=0;j<n;j++) { scanf("%1s",str); tmp[j]=str[0]; } tmp[j]='\0'; for(j=0;j<n;j++) map[s[j]-'A'][tmp[j]-'A']++; //init(30); int res=KM(26); ans[i]=1.0*res/n; } for(i=0;i<m;i++) printf("%.4lf\n",ans[i]); } return 0;}
- hdu 3718 KM最优匹配
- hdu 3722 二分图 最优完备匹配 KM算法
- hdu 1533 KM算法 二分图最优匹配
- HDU 3488 KM算法求最优匹配模板
- hdu 3718 Similarity【KM匹配】
- KM算法(最优匹配)
- KM算法(最优匹配)
- KM算法(最优匹配)
- HDU 3718 Similarity(KM最大匹配)
- hdu 1533 KM匹配
- hdu 2813 KM匹配
- One fihgt one hdu 2813 map+二分图最优匹配+KM快速模板
- hdu 2255 奔小康赚大钱 (二分图最优匹配,KM算法)
- km算法的非最优匹配应用
- hdu2255二分最优匹配KM标准模板
- hdu2426 二分最优匹配KM算法
- KM算法求二分图最优匹配
- 二分最优匹配,KM算法详解
- hdu 3685 计算几何(好)
- poj 1265 pick定理的应用,水
- uvc摄像头代码解析6
- poj 2954 pick定理
- pku 3348 计算几何 求凸包面积
- hdu 3718 KM最优匹配
- hdu 3711 暴力
- poj 2186 popular cows 强连通缩点
- poj 2942 圆桌武士
- poj 2553 缩点,求出度为0 的点连通块中的点
- poj 1236 强连通好题
- poj 3713 图的三连通
- poj 1410 判断线段与长方形是否相交
- poj、 2546 两圆面积交