hdu 2853
虚拟赛一开始lyf就对我说这是一道匹配的题目,我一看明显裸的最优匹配,敲完提交wrong,
题目要求改变尽量少的公司,就是如果遇到相等的权值,优先选择跟他原来匹配的,KM匹配是按序号大小来的,如果一个公司原来匹配的序号较大,前面有权值相等的点时,KM就会选择前面的点参加匹配。想了好长时间不知道怎么去优先选择原来匹配的边,
最后想着如果把原来匹配的边变得大一些的话,就可以,但是变大的话就会影响最优匹配的总值,而且变大的话还会影响原来比他大的权值,所以就是所有的权值都得扩大,我想到的是都*100,原来匹配的边再加1,因为最多选50条边,也就是最多有50个01相加,不会超过一百,得到的答案除以一百,就把加的1都去掉了,只要扩大的倍数大于n就可以,,
#include<stdio.h>
#include<string.h>
#define N 55
#define inf 0x3fffffff
int map[N][N],lx[N],ly[N],sx[N],sy[N],d[N],n,m,match[N],Kmatch[N],tch[N];
int find(int x)
{
sx[x]=1;
for(int i=1;i<=m;i++)
{
if(sy[i]==1)continue;
int temp=lx[x]+ly[i]-map[x][i];
if(temp==0)
{
sy[i]=1;
if(match[i]==-1||find(match[i])==1)
{
match[i]=x;
Kmatch[x]=i;
return 1;
}
}
else d[i]=d[i]>temp?temp:d[i];
}
return 0;
}
int KM()
{
int i,j,k,min,sum;
memset(ly,0,sizeof(ly));
memset(match,-1,sizeof(match));
memset(Kmatch,-1,sizeof(Kmatch));
for(i=1;i<=n;i++)
{
lx[i]=map[i][1];
for(j=2;j<=m;j++)
if(lx[i]<map[i][j])
lx[i]=map[i][j];
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
d[j]=inf;
while(1)
{
memset(sx,0,sizeof(sx));
memset(sy,0,sizeof(sy));
if(find(i)==1)break;
min=inf;
for(k=1;k<=m;k++)
if(sy[k]==0&&min>d[k])
min=d[k];
for(j=1;j<=n;j++)
if(sx[j]==1)lx[j]-=min;
for(j=1;j<=m;j++)
if(sy[j]==1)ly[j]+=min;
}
}
sum=0;
for(i=1;i<=n;i++)
sum+=map[i][Kmatch[i]];
return sum;
}
int main()
{
int i,j,k,ans,sum;
while(scanf("%d%d",&n,&m)!=-1)
{
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
map[i][j]=-inf;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
scanf("%d",&map[i][j]);
map[i][j]*=100;
}
ans=0;
for(i=1;i<=n;i++)
{
scanf("%d",&k);
tch[i]=k;
ans+=map[i][k];
map[i][k]++;
}
ans/=100;
sum=KM()/100;
k=0;
for(i=1;i<=n;i++)
if(tch[i]!=Kmatch[i])
k++;
printf("%d %d\n",k,sum-ans);
}
return 0;
}
hdu 2853的更多相关文章
- 【HDU 2853】Assignment (KM)
Assignment Problem Description Last year a terrible earthquake attacked Sichuan province. About 300, ...
- HDU 2853 Assignment(KM最大匹配好题)
HDU 2853 Assignment 题目链接 题意:如今有N个部队和M个任务(M>=N),每一个部队完毕每一个任务有一点的效率,效率越高越好.可是部队已经安排了一定的计划,这时须要我们尽量用 ...
- Assignment HDU - 2853(二分图匹配 KM 新边旧边)
传送门: Assignment HDU - 2853 题意:题意直接那松神的题意了.给了你n个公司和m个任务,然后给你了每个公司处理每个任务的效率.然后他已经给你了每个公司的分配方案,让你求出最多能增 ...
- HDU 2853 最大匹配&KM模板
http://acm.hdu.edu.cn/showproblem.php?pid=2853 这道题初看了没有思路,一直想的用网络流如何解决 参考了潘大神牌题解才懂的 最大匹配问题KM 还需要一些技巧 ...
- HDU 2853 (KM最大匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2853 题目大意:二分图匹配费用流.①最大匹配②最小原配变动 解题思路: 如果去掉第二个要求,那么就是裸 ...
- 【HDU 2853】 KM算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2853 题意:有n个公司,m个任务,每个公司做每个任务都有一个效率值,最开始每个公司都指派了一个任务,现 ...
- hdu 2853 Assignment KM算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2853 Last year a terrible earthquake attacked Sichuan ...
- HDU 2853 && HDU 3315
http://acm.hdu.edu.cn/showproblem.php?pid=2853 题意:给一个n-m二分图,边权用一个n*m的矩阵表示,给出初始匹配,求二分图完美匹配相比初始匹配改变了几条 ...
- Assignment (HDU 2853 最大权匹配KM)
Assignment Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 2853 & 剩余系+KM模板
题意: 给你一张二分图,给一个原匹配,求原匹配改动最少的边数使其边权和最大. SOL: 我觉得我的智商还是去搞搞文化课吧..这种题给我独立做我大概只能在暴力优化上下功夫.. 这题的处理方法让我想到了剩 ...
随机推荐
- 设计模式2----建造者模式(builder pattern)
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 类型:创建类模式 类图: UML图 四个要素 Builder: 抽象建造者ConcreteBuilder: 具体建造者 ...
- AgileEAS.NET SOA中间件平台/敏捷软件开发平台 and SQL详解
AgileEAS.NET SOA中间件平台/敏捷软件开发平台 http://www.smarteas.net/ SQL详解: http://www.w3school.com.cn/sql/func_d ...
- Calendar 日历控件使用
<link rel="stylesheet" href="__STATIC__/js/calendar/calendar-blue.css"/> & ...
- Asp.Net WebAPI 通过HttpContextBase获取请求参数
WEBAPI中的Request是HttpRequestMessage类型,不能像Web传统那样有querystring和from 方法接收参数,而传统的HttpReqest的基类是HttpReqest ...
- openfire spark 二次 开发 服务插件
==================== 废话 begin ============================ 最近老大让我为研发平台增加即时通讯功能.告诉我用comet 在web端实现即 ...
- iPhone手机的屏幕尺寸、分辨率及适配
1.iPhone尺寸规格 设备 iPhone 宽 Width 高 Height 对角线 Diagonal 逻辑分辨率(point) Scale Factor 设备分辨率(pixel) PPI 3GS ...
- Android小试牛刀之遇到的问题
1.运行出错 创建项目时没有使用Empty Activity,创建. 2.创建第一个工程 选择Empty Activity才会自动创建Hello Word代码块 3.appcompat_v7的说明 在 ...
- 单源最短路径 hdu 2066
#include<string.h> //和prim类似#include<stdio.h> //prim所考虑的是节点与当前所建成的树的距离最小using namespace ...
- Symfony2 HttpKernel事件驱动
HttpKernel:事件驱动 Symfony2 框架层和应用层的工作都是在 HttpKernel::handle()方法中完成,HttpKernel::handle() 的内部的实现其实 ...
- rsync相关整理
第一部分 rsync服务端配置 1.下载安装 a. yum安装. yum install rsync b. 下载rsync安装文件安装 #tar zxvf rsync-2.6.9 ...