http://poj.org/problem?id=2400

KM算法http://philoscience.iteye.com/blog/1754498

题意:每个雇主对雇员有个满意度 雇员对雇主有个满意度 求最匹配的雇员与雇主

最小权匹配 这个给出的数据矩阵貌似是反着的 建图的时候反一下就好了

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stdlib.h>
#define N 110
#define INF 0x3f3f3f
using namespace std;
int w[N][N],n,x[N],y[N],lx[N],ly[N],link[N],sum,o[N],vis[N],num;
bool match(int u)
{
x[u] = ;
for(int i = ; i <= n ; i++)
if(lx[u]+ly[i]==w[u][i]&&!y[i])
{
y[i] = ;
if(!link[i]||match(link[i]))
{
link[i] = u;
return true;
}
}
return false;
}
double km()
{
int i,j,g;
for(i = ; i <= n ; i++)
link[i] = lx[i] = ly[i]=;
for(i = ; i <= n ; i++)
{
for(;;)
{
for(j = ;j <= n ; j++)
x[j] = y[j] = ;
if(match(i)) break;
int d = INF;
for(j = ; j <= n ; j++)
{
if(x[j])
for(g = ; g <= n ; g++)
if(!y[g])
d = min(d,lx[j]+ly[g]-w[j][g]);
}
for(j = ; j <= n ; j++)
{
if(x[j]) lx[j]-=d;
if(y[j]) ly[j]+=d;
}
}
}
sum=;
for(i = ; i <= n ; i++)
sum-=(lx[i]+ly[i]);
return 1.0*sum/(*n);
}
void dfs(int u,int ss)
{
int i;
if(ss>sum) return ;
if(u==n+)
{
printf("Best Pairing %d\n",++num);
for(i = ;i <= n ; i++)
printf("Supervisor %d with Employee %d\n",i,o[i]);
return ;
}
for(i = ; i <= n ; i++)
{
if(!vis[i])
{
vis[i] = ;
o[u] = i;
dfs(u+,ss-w[u][i]);
vis[i] = ;
}
}
}
int main()
{
int i,j,kk=,cas,a;
scanf("%d",&cas);
while(cas--)
{
kk++;num=;
scanf("%d",&n);
memset(w,,sizeof(w));
memset(vis,,sizeof(vis));
for(i = ; i <= n ; i++)
for(j = ; j <= n ; j++)
{
scanf("%d",&a);
w[a][i] -= j;
}
for(i = ; i <= n ; i++)
for(j = ; j <= n ; j++)
{
scanf("%d",&a);
w[i][a]-=j;
}
double s = km();
printf("Data Set %d, Best average difference: %.6f\n",kk,s-);
dfs(,);
puts("");
}
return ;
}

poj2400Supervisor, Supervisee(KM)的更多相关文章

  1. poj图论解题报告索引

    最短路径: poj1125 - Stockbroker Grapevine(多源最短路径,floyd) poj1502 - MPI Maelstrom(单源最短路径,dijkstra,bellman- ...

  2. 【POJ 2400】 Supervisor, Supervisee(KM求最小权匹配)

    [POJ 2400] Supervisor, Supervisee(KM求最小权匹配) Supervisor, Supervisee Time Limit: 1000MS   Memory Limit ...

  3. POJ 2400 Supervisor, Supervisee(KM)

    題目鏈接 題意 :N个部门和N个员工,每个部门要雇佣一个工人,部门对每个工人打分,从1~N,1表示很想要,N表示特别不想要,每个工人对部门打分,从1~N.1表示很想去这个部门,N表示特别不想去这个部门 ...

  4. POJ 2400 Supervisor, Supervisee(KM二分图最大权值匹配)题解

    题意:n个老板n个员工,先给你n*n的数据,i行j列代表第i个老板第j喜欢的员工是谁,再给你n*n的数据,i行j列代表第i个员工第j喜欢的老板是谁,如果匹配到第k喜欢的人就会产生一个分数k-1.现在让 ...

  5. 【转】KM匹配题集

    转自:http://blog.csdn.net/shahdza/article/details/7779324 [HDU]2255 奔小康赚大钱 模板题★1533 Going Home 模板题★242 ...

  6. 匈牙利算法与KM算法

    匈牙利算法 var i,j,k,l,n,m,v,mm,ans:longint; a:..,..]of longint; p,f:..]of longint; function xyl(x,y:long ...

  7. 【HDU2255】奔小康赚大钱-KM算法

    Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description ...

  8. HDU2255-奔小康赚大钱-二分图最大权值匹配-KM算法

    二分图最大权值匹配问题.用KM算法. 最小权值的时候把权值设置成相反数 /*-------------------------------------------------------------- ...

  9. KM模板

    var n,m,i,j:longint; ans:int64; sel,lx,ly,slack:..] of int64; a:..,..] of int64; visx,visy:..] of bo ...

随机推荐

  1. apache配置网站目录的读写权限

    分享下apache中配置网站目录文件权限的方法. 假设http服务器运行用户和用户组是www,网站用户为centos,网站根目录是/home/centos/web. 操作方法与步骤:1,首先,设定网站 ...

  2. Spark Streaming揭秘 Day12 数据安全容错(Executor篇)

    Spark Streaming揭秘 Day12 数据安全容错(Executor篇) 今天,让我们研究下SparkStreaming在Executor端的数据安全及容错机制. 在SparkStreami ...

  3. Custom Control

    How to create custom control http://www.silverlightshow.net/items/Creating-a-Silverlight-Custom-Cont ...

  4. 浅谈string

    #include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件 using std::string;using ...

  5. fragment第二次载入就报错

    1.布局中加入一个<fragment 标签,第一次载入的时候是正常的,第二次加载的时候,就直接crashed,退出 2.查到原因Caused by: java.lang.IllegalArgum ...

  6. PHP微信开发代码

    1,SAE上申请服务器 2,绑定测试账号 3,Token验证 <?php /* http://www.cnblogs.com/xrhou12326/ CopyRight 2014 All Rig ...

  7. php-fpm.conf 文件详解

    pid string PID文件的位置. 默认为空. error_log string 错误日志的位置. 默认: 安装路径#INSTALL_PREFIX#/log/php-fpm.log. log_l ...

  8. C# 将datatable 转换json

    public static string DataTableToJson(DataTable dt) { StringBuilder jsonBuilder = new StringBuilder() ...

  9. ajaxfileupload踩过的坑

    首先ajaxfileupload-jQuery.handleError is not a function这个错误,百度之后发现解决办法就是把 handleError: function( s, xh ...

  10. 微软Hololens设备 浅分析

    微软Hololens的定位是一款MR 设备(Mixed reality).MR与AR的不同我认为是MR能够将真实环境的场景信息与虚拟对象进行完美的融合,它是基于SLAM(SimultaneousLoc ...