【HDU 2853】 KM算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2853
题意:有n个公司,m个任务,每个公司做每个任务都有一个效率值,最开始每个公司都指派了一个任务,现在要你重新给每个公司分配一个任务(一个任务只能分配给一家公司),使得所有公司任务的效率值最大,并且改变的原始任务最少。
思路:把每条边的权值扩大k倍(k>n),然后属于原始任务的边权值+1,权值加1是为了当两条边权值相同时,更优先选择属于原始任务的边,扩大k倍的巧妙之处不仅在于KM匹配时优先选择原始边所得答案除k得到原始答案,而且结果对k求余就是保留的就是原始任务的数量。
这种题对思维要求太高了,想不到 T.T
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std; const int maxn=;
const int oo=1e9;
int lx[maxn], ly[maxn], vx[maxn], vy[maxn], match[maxn], slack[maxn];
int map[maxn][maxn];
int n, m; bool find(int i)
{
vx[i]=; ///相等子图中X集合
for(int j=; j<=m; j++)
if(!vy[j])
{
int t=lx[i]+ly[j]-map[i][j];
if(t==) ///当这条边在相等子图中
{
vy[j]=; ///相等子图中Y集合
if(match[j]==-||find(match[j]))
{
match[j]=i;
return true;
}
}
else slack[j]=min(slack[j],t);
}
return false;
} int KM()
{
int ans=;
memset(match,-,sizeof(match));
memset(ly,,sizeof(ly));
for(int i=; i<=n; i++)
{
lx[i]=-oo;
for(int j=; j<=m; j++)
lx[i]=max(lx[i],map[i][j]); ///顶标lx初始化保存的是连接i节点的最大边权值
}
for(int i=; i<=n; i++)
{
for(int j=; j<=m; j++) slack[j]=oo;
while()
{
memset(vx,,sizeof(vx));
memset(vy,,sizeof(vy));
if(find(i)) break;
int d=oo;
for(int j=; j<=m; j++)
if(!vy[j]) d=min(d,slack[j]);
for(int j=; j<=n; j++)
if(vx[j]) lx[j]-=d;
for(int j=; j<=m; j++)
if(vy[j]) ly[j]+=d;
for(int j=; j<=m; j++) slack[j]-=d;
}
}
for(int i=; i<=m; i++)
if(match[i]!=-) ans+=map[ match[i] ][i];
return ans;
} int main()
{
while(cin >> n >> m)
{
for(int i=; i<=n; i++)
for(int j=; j<=m; j++) map[i][j]=-oo;
for(int i=; i<=n; i++)
for(int j=; j<=m; j++)
{
int c;
scanf("%d",&c);
map[i][j]=max(map[i][j],*c);
}
int sum=;
for(int i=,j; i<=n; i++)
{
scanf("%d",&j);
sum+=map[i][j]/;
map[i][j]+=;
}
int ans=KM();
printf("%d %d\n",n-ans%,ans/-sum);
}
return ;
}
【HDU 2853】 KM算法的更多相关文章
- hdu 3488(KM算法||最小费用最大流)
Tour Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submis ...
- HDU 2255 KM算法 二分图最大权值匹配
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- hdu 2448(KM算法+SPFA)
Mining Station on the Sea Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- hdu 3395(KM算法||最小费用最大流(第二种超级巧妙))
Special Fish Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- HDU 2853 (KM最大匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2853 题目大意:二分图匹配费用流.①最大匹配②最小原配变动 解题思路: 如果去掉第二个要求,那么就是裸 ...
- hdu 4862 KM算法 最小K路径覆盖的模型
http://acm.hdu.edu.cn/showproblem.php?pid=4862 选t<=k次,t条路要经过全部的点一次而且只一次. 建图是问题: 我自己最初就把n*m 个点分别放入 ...
- HDU 1533 KM算法(权值最小的最佳匹配)
Going Home Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- hdu 3435(KM算法最优匹配)
A new Graph Game Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- hdu 1853 KM算法
#include<stdio.h> #include<math.h> #include<string.h> #define N 200 #define inf 99 ...
- hdu 2853 Assignment KM算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2853 Last year a terrible earthquake attacked Sichuan ...
随机推荐
- Callable接口、Runable接口、Future接口
1. Callable与Runable区别 Java从发布的第一个版本开始就可以很方便地编写多线程的应用程序,并在设计中引入异步处理.Thread类.Runnable接口和Java内存管理模型使得多线 ...
- 给img添加类名可以动态切换图片
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- JQuery学习之jQuery尺寸
1.width()和height()方法: width():设置或返回元素的宽度(不包括内边距,边框或外边距) height():设置或返回元素的高度(不包括内边距,边框或外边距) $("b ...
- css3 -- 媒体查询
媒体查询: 1.媒体查询优点:基于设备的属性检测设备,这样一来就不需要使用浏览器探测脚本,之后允许直接安装设备的功能去设定目标样式表,也就是说检测用户使用小屏幕的设备,css规则就会调整以适应该屏幕的 ...
- 使用Spring发送邮件
http://www.oschina.net/code/snippet_253813_36503
- Redis开启持久化
配置appendonly 打开redis.conf找到appendonly. 将 appendonly no 改为 appendonly yes 配置appendfsync appendfsync a ...
- section和article元素
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- HDU4758 Walk Through Squares(AC自动机+状压DP)
题目大概说有个n×m的格子,有两种走法,每种走法都是一个包含D或R的序列,D表示向下走R表示向右走.问从左上角走到右下角的走法有多少种走法包含那两种走法. D要走n次,R要走m次,容易想到用AC自动机 ...
- Apache ActiveMQの版本更迭和Apache ActiveMQの故障转移
本文描述apache activemq 版本更迭的原因以及Apache ActiveMQのThe Failover Transport new features in 5.2.0 1.对信息的传输/ ...
- HDU-2844 Coins(多重背包)
Problem Description Whuacmers use coins.They have coins of value A1,A2,A3...An Silverland dollar. On ...