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. 【转】DataGridView之为每行前面添加序号

    //最简单的方法是在Datagridview的事件RowPostPaint事件下面添加如下代码即可 private void dataGridView1_RowPostPaint(object sen ...

  2. centos6.5 最小化安装无法上网

    在VMware里装了个centos 6.5.  最小化安装后无法上网.在 google里找到答案 第一步:执行命令启动网卡 (最小化安装不是自动启动的) [root@localhost]# ifcon ...

  3. SQL Server 2000 “用户XX已经存在” 处理方法

    -- 目前遇到这个问题都是在切换服务器时发生的. 旧服务器备份的数据库还原到新服务器,都会遇到这种问题 --切决方案如下: -- 查找孤立用户列表 EXECUTE sp_change_users_lo ...

  4. 解决pxe网络批量安装部署linux遇到的问题和解决方法

    解决“出现Unable to retrieve 192.168.0.100/var/www/html/images/install.img错误” 分析:我们必须了解这个错误出现在哪个阶段才能正确找到错 ...

  5. ubuntu中替代visio的软件 dia

    ubuntu 中 软件  dia 可以替代 ms-visio软件. 安装过程可以在线安装: sudo apt-get install dia

  6. JS 判断一个字符串是否包含在一个数组中

    var arr = ["白色", "黑色", "红色", "粉色"]; var sel = "黑色" ...

  7. (转)ASP.NET缓存全解析6:数据库缓存依赖

    ASP.NET缓存全解析文章索引 ASP.NET缓存全解析1:缓存的概述 ASP.NET缓存全解析2:页面输出缓存 ASP.NET缓存全解析3:页面局部缓存 ASP.NET缓存全解析4:应用程序数据缓 ...

  8. PHP视频教程 > PHP面向对象编程视频教程

    当前位置: 主页 > 编程开发 > PHP视频教程 > PHP面向对象编程视频教程 > kingstone金士顿手机内存卡16G仅65元 1.1.什么是面向对象和类 上传日期: ...

  9. EXTJS 4.2 资料 控件之 Store 用法

    最近工作,发现在Extjs中自定义Store的功能挺多,特意在此做笔记,几下来,具体代码如下: 1.定义Store //定义Store var ItemSelectorStore = new Ext. ...

  10. SRM 616 ColorfulCoins

    题意:给定一个从小到大的货币面值,每一个面额都是其前面面额的倍数(倍数大于等于2),每一种货币面值对应一种颜色,目前不清楚面值与颜色的对应关系.要求用最少的查询次数来确定面额与颜色的对应关系.(一次查 ...