传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子。
这可是一件大事,关系到人民的住房问题啊。村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓没房子住的话,容易引起不安定因素),每家必须分配到一间房子且只能得到一间房子。
另一方面,村长和另外的村领导希望得到最大的效益,这样村里的机构才会有钱.由于老百姓都比较富裕,他们都能对每一间房子在他们的经济范围内出一定的价格,比如有3间房子,一家老百姓可以对第一间出10万,对第2间出2万,对第3间出20万.(当然是在他们的经济范围内).现在这个问题就是村领导怎样分配房子才能使收入最大.(村民即使有钱购买一间房子但不一定能买到,要看村领导分配的).

二分图最佳匹配,KM算法裸题

 #include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
const int INF=0x3f3f3f3f;
const int maxn=;
int g[maxn][maxn],match[maxn],lx[maxn],ly[maxn],visx[maxn],visy[maxn],s[maxn],n,m;
bool hungary(int u){
visx[u]=;
for(int i=;i<=n;++i){
if(!visy[i]&&lx[u]+ly[i]==g[u][i]){
visy[i]=;
if(!match[i]||hungary(match[i])){
match[i]=u;
return ;
}
}
else if(!visy[i])s[i]=min(s[i],lx[u]+ly[i]-g[u][i]);
}
return ;
}
int KM(){
for(int i=;i<=n;++i){
for(int j=;j<=n;++j)s[j]=INF;
while(){
memset(visx,,sizeof(visx));
memset(visy,,sizeof(visy));
if(hungary(i))break;
int d=INF;
for(int j=;j<=n;++j)
if(!visy[j])d=min(d,s[j]);
for(int j=;j<=n;++j){
if(visx[j])lx[j]-=d;
if(visy[j])ly[j]+=d;
else s[j]-=d;
}
}
}
int ans=;
for(int i=;i<=n;++i)ans+=g[match[i]][i];
return ans;
}
int main(){
while(scanf("%d",&n)!=EOF){
memset(lx,,sizeof(lx));
memset(ly,,sizeof(ly));
memset(match,,sizeof(match));
for(int i=;i<=n;++i){
for(int j=;j<=n;++j){
scanf("%d",&g[i][j]);
lx[i]=max(lx[i],g[i][j]);
}
}
printf("%d\n",KM());
}
return ;
}

最新文章

  1. 检查日期是否为节假日api
  2. 作业二:Github注册过程
  3. 理解JavaScript的作用域链
  4. CentOS 与 RedHat 关系和区别
  5. 日常使用的shell脚本
  6. Redis常见用法
  7. How to Call a synchronize function asynchronizly in C#
  8. PHP配置文件详解php.ini [转]
  9. [hihoCoder]#1039 : 字符消除
  10. 对css float 浮动的学习心得
  11. AbstractExecutorService (未完成)
  12. MCS-51单片机实用子程序库
  13. 网页中获取网络mp3文件的时常
  14. pycharm 中 django 导入静态文件不提示补全
  15. hibernate坑边闲话2
  16. jenkins 迁移后 提示 反向代理设置有误
  17. 【转】Git超实用总结,再也不怕记忆力不好了
  18. python Django编写登录项目
  19. 《网络攻防》实验八:Web基础
  20. ffmpeg h264+ts +udp传输

热门文章

  1. Python Django 之 ADMIN
  2. :策略模式--Duck
  3. C++基础知识:构造与析构
  4. 接口测试-webservice接口---soapui
  5. js重写trim()方法
  6. 二分查找(lower_bound和upper_bound)
  7. chrome 总崩溃的正确解决方法
  8. PAT 乙级1003. 我要通过!(20)
  9. HDU 1205 吃糖果(想想题)
  10. [转]PLA算法总结及其证明