Interesting Housing Problem

HDU - 2426

题意:n个人,m个房间,安排住宿。要求每个人不能分到不喜欢的房间,且使满意度最大。

不用slack几乎要超时~

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int inf=0x3f3f3f3f;
 4 const int maxn=550;
 5
 6 int c[maxn][maxn];
 7 int vb[maxn],vg[maxn],eb[maxn],eg[maxn];
 8 int mc[maxn];
 9 int slack[maxn];
10 int n,m,r;
11
12 int dfs(int id){
13     vg[id]=1;
14     for(int i=0;i<m;i++){
15         int gap=eg[id]+eb[i]-c[id][i];
16         if(vb[i]) continue;
17         if(gap==0){
18             vb[i]=1;
19             if(mc[i]==-1||dfs(mc[i])){
20                 mc[i]=id;
21                 return 1;
22             }
23         }
24         else slack[i]=min(slack[i],gap);
25     }
26     return 0;
27 }
28
29 int KM()
30 {
31     memset(mc,-1,sizeof(mc));
32     memset(eb,0,sizeof(eb));
33     for(int i=0;i<n;i++){
34         eg[i]=c[i][0];
35         for(int j=1;j<m;j++)
36             eg[i]=max(eg[i],c[i][j]);
37     }
38
39     for(int i=0;i<n;i++){
40         memset(slack,inf,sizeof(slack));
41         while(1){
42             memset(vb,0,sizeof(vb));
43             memset(vg,0,sizeof(vg));
44             if(dfs(i)) break;
45             int d=inf;
46             for(int j=0;j<m;j++) if(!vb[j]) d=min(d,slack[j]);
47             if(d==inf) return -1;
48             for(int j=0;j<n;j++) if(vg[j]) eg[j]-=d;
49             for(int j=0;j<m;j++)
50                 if(vb[j]) eb[j]+=d;
51                 else slack[j]-=d;
52         }
53     }
54     int ans=0;
55     for(int i=0;i<m;i++){
56         if(mc[i]!=-1){
57             if(c[mc[i]][i]!=-inf) ans+=c[mc[i]][i];
58             else return -1;
59         }
60     }
61     return ans;
62 }
63
64 int main(){
65     int u,v,w;
66     int kase=0;
67     while(scanf("%d%d%d",&n,&m,&r)!=EOF){
68        for(int i=0;i<n;i++)
69         for(int j=0;j<m;j++)
70         c[i][j]=-inf;
71         for(int i=0;i<r;i++){
72             scanf("%d%d%d",&u,&v,&w);
73             if(w>=0) c[u][v]=w;
74         }
75         printf("Case %d: %d\n",++kase,KM());
76     }
77 }

slack

转载于:https://www.cnblogs.com/yijiull/p/7389644.html

Interesting Housing Problem HDU - 2426 (KM)相关推荐

  1. Hdu 1533(KM算法)

    Hdu 1533 (1)思路: KM算法模板题, 将每个人到家的距离求出来, 求出最小的距离,所以可以将距离变为负数,然后求出负数的最大值,就是正数的最小值. (2)代码: #include<i ...

  2. hdu 2224(dp)

    hdu 2224 (1)题意: 从1找一条到n的路径(路径上的前一个节点的编号小于后一个节点的编号), 然后找一条从n到1的路径,(路径上的前一个节点的编号大于后一个节点的编号)要求这两条路径遍历所有 ...

  3. hdu 3488(uva 1349)(KM)

    这道题是uva 1349 的简化版,那题没过,不知道为什么.我觉得那题就是多了一个先判断他最大匹配数是不是n,是的话,再找最优匹配. 回到这题,匹配问题,又是有向图,直接想到了拆点法.然后发现若每个点 ...

  4. hdu 5055(坑)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5055 Bob and math problem Time Limit: 2000/1000 MS (J ...

  5. Entity Framework Unit Testing problem and solution(转)

    其实下文中说的解决方案不仅仅适用于应用了Ef的项目,其它涉及数据访问的测试同样适用. 不说先贴上原文链接 : (一) http://graemehill.ca/unit-testing-an-enti ...

  6. HDU 4545 (模拟) 魔法串

    题目链接 Problem Description 小明和他的好朋友小西在玩一个新的游戏,由小西给出一个由小写字母构成的字符串,小明给出另一个比小西更长的字符串,也由小写字母组成,如果能通过魔法转换使小 ...

  7. A+B Problem _ C++(嘿嘿)

    题目背景 作为所有编程语言的最"难"(一点也不难是假的)的一道题,曾近难倒了许多"大佬",本次提供几种"简单"算法(嘿嘿): 题目描述 a+ ...

  8. hdu 5534(dp)

    Input The first line contains an integer T indicating the total number of test cases. Each test case ...

  9. hdu 4196(数论)

    题意:问小于n的数的乘积能拼成的最大平方数是多少? 思路:给n!做质数分解在除去指数为奇数的那些质数,由于题目中需要模运算所以不能直接除,必须乘上摸逆. 代码如下: 1 /************** ...

  10. [KM算法]hdoj 2426:Interesting Housing Problem

    大致题意: 有n个小孩要去m间屋子,每间屋子只能住一个人.每个小孩都会对一些屋子打分.已知每个小孩不能去那些他打负分和没打分的屋子,求安排住宿后所有人对自己屋子打分之和最大值是多少. 大致思路: KM ...

最新文章

  1. C# 移动鼠标方法
  2. 偏差-方差权衡的理解
  3. delphi 读取ini所有项_财务机器人真的会代替财务人员所有工作吗?
  4. 物理学家杨振宁到底有多厉害?
  5. Windbg SOS and CLR版本不一致的解决方案
  6. Apache重定向方法实现图片防盗链
  7. Mina Protocol将主网候选版本发布时间延后一小时至3月17日8点
  8. 《推荐系统笔记(五)》svd降维 —— 以图片处理为例
  9. Node.js:Node模块简介
  10. matlab 同态滤波
  11. 使用STM32的I2S协议读取麦克风INMP441
  12. DEDECMS5.7自动采集更新伪原创插件高级版GBK
  13. 2017最新版《土地利用现状分类》GBT 21010-2017‰
  14. 数据库表插入中文数据时报错Incorrect string value: ‘\xE4\xBB\x8E\xE5\x85\xA5...‘ for column ‘name‘ at r
  15. 23.2、Android -- OkHttp3 基础学习 自定义设置
  16. 航弈单通道脑电设备通过lsl在Matlab中接收数据
  17. 代码中的软件工程:正则表达式十步通关
  18. 二分法解具有单调性的方程
  19. 【热门书籍】温度决定生老病死 作者:马悦凌
  20. pyqt5以及pyqtgraph(pyqt界面设计绘图)

热门文章

  1. 使用Antlr实现简单的DSL
  2. UDP ECHO server
  3. 方维P2P添加富友金账户接口实例
  4. 基于汇编的 C/C++ 协程 - 背景知识
  5. 前端移动App开发环境搭建
  6. 通过binlog恢复mysql数据库
  7. 【JAVA】什么时候会发生空指针异常
  8. hive启动debug问题
  9. Juniper SRX210恢复密码过程
  10. jmeter线程跳转_有什么方法调用jmeter的接口