当前位置: 首页 > news >正文

[Non] 房屋分配

[Non] 房屋分配

大意

给定 \(n\) 户村民和 \(n\) 间房,每户对每间房有一个报价,求一个完美匹配,使得匹配的总报价和最大。

思路

这个题实际上是一个二分图最大权匹配,那么我们需要做什么呢?

一共 \(n\) 个人,分 \(n\) 间房子,最大匹配,且有 \(n \times n\) 条边,所以一定能保证一个最大的匹配,那么我们需要考虑的就是如何让费用最大。

我们只需要保证,每个村民只分 1 间房子每间房子只被分配 1 次,那么我们只需要建立源点 \(S\),由 \(S\) 向每个村民连容量为 \(1\),费用为 \(0\) 的边,再在村民和房子间连容量为 \(1\),费用为 \(-w_i\) 的边(因为我们求的是最短路,最后直接取反),在房子和最终的汇点连容量为 \(1\),费用为 \(0\) 的边,求最小费用最大流即可,最终输出答案取反即可。

代码

#include <iostream>
#include <string.h>
#include <queue>
using namespace std;const int MAX_N = 1000;
const int MAX_M = MAX_N * MAX_N * 2;
const int inf = 0x3f3f3f3f;
struct edge {int v, c, w, next;
} e[MAX_M];
int p[MAX_N], s, t, eid;
void init() {memset(p, -1, sizeof(p));eid = 0;
}
void insert(int u, int v, int c, int w) {e[eid].v = v;e[eid].c = c;e[eid].w = w;e[eid].next = p[u];p[u] = eid++;
}
void addedge(int u, int v, int c, int w) {insert(u, v, c, w);insert(v, u, 0, -w);
}
bool vis[MAX_N];
int d[MAX_N];
int pre[MAX_N];
bool spfa() {memset(vis, 0, sizeof(vis));memset(d, 0x3f, sizeof(d));memset(pre, -1, sizeof(pre));d[s] = 0;vis[s] = true;queue<int> q;q.push(s);while (!q.empty()) {int u = q.front();q.pop();vis[u] = false;for (int i = p[u]; i != -1; i = e[i].next) {if (e[i].c) {int v = e[i].v;if (d[u] + e[i].w < d[v]) {d[v] = d[u] + e[i].w;pre[v] = i;if (!vis[v]) {q.push(v);vis[v] = true;}}}}}return pre[t] != -1;
}
int costflow() {int ret = 0;while(spfa()) {int flow = inf;for(int i = t; i != s; i = e[pre[i]^1].v) {flow = min(e[pre[i]].c, flow);}for(int i = t; i != s; i = e[pre[i]^1].v) {e[pre[i]].c -= flow;e[pre[i]^1].c += flow;ret += e[pre[i]].w * flow;}}return ret;
}
int main() {freopen("house.in", "r", stdin);freopen("house.out", "w", stdout);int n;init();cin >> n;s = 0, t = 2 * n + 1;for(int i = 1; i <= n; i++) {addedge(s, i, 1, 0);}for(int i = 1; i <= n; i++) {addedge(i + n, t, 1, 0);}for(int i = 1; i <= n; i++) {for(int j = 1; j <= n; j++) {int price;cin >> price;addedge(i, j + n, 1, -price);}}cout << -costflow() << endl;return 0;
}
http://www.jsqmd.com/news/382957/

相关文章:

  • 2026年 亚克力厚板/透明亚克力/亚克力泳池/亚克力工厂推荐榜:匠心制造与大型工程定制解决方案深度解析 - 品牌企业推荐师(官方)
  • Python深度学习:从入门到实战完整教程:从入门到实战部署
  • 2026年 南通百度开户/360开户/百度广告代理推荐榜:专业竞价开户与平台运营服务口碑之选 - 品牌企业推荐师(官方)
  • 2025.2.8总结
  • 电脑开机慢如蜗牛?先别急着换电脑,换个固态硬盘瞬间起飞!
  • 小程序路由、导航、tabBar
  • 2025.2.9总结
  • AI动作迁移神器通义万象开源版:静态图秒变热舞视频,附高清修复教程
  • 2026年 粉碎机厂家实力推荐榜:30B高效/WF-30B中草药/万能/粗/超微粉碎机,精选耐用高效机型助力生产 - 品牌企业推荐师(官方)
  • OpenEuler 20.03构建zabbix rpm包
  • 2025.2.7总结
  • 2026年 风冷模块机/水冷模块机厂家推荐排行榜,二手风冷模块机,成都二手水冷模块,实力品牌与高性价比方案深度解析 - 品牌企业推荐师(官方)
  • 2026年南通网络推广代运营推荐榜:百度/爱采购/360/GEO/百家号全平台专业服务深度解析 - 品牌企业推荐师(官方)
  • 2026年晶体振荡器厂家推荐排行榜:贴片/有源/无源/石英/差分/恒温/压控/温补/车规/工业级全系列精准时频解决方案深度解析 - 品牌企业推荐师(官方)
  • 报错:动态链接库(DLL)初始化例程失败 - f
  • 2026年 连续挤压机厂家推荐排行榜,铝扁线/铜材/高速连续挤压机,铝管/铜排挤压生产线专业品牌深度解析 - 品牌企业推荐师(官方)
  • AI原生应用开发指南:知识抽取模块的设计与优化
  • 什么是VPC(虚拟私有云,Virtual Private Cloud)网络?
  • 向量模型的训练 - f
  • 2026年 企业管理咨询公司推荐榜单:江苏上海精益生产/6S现场/薪酬绩效/股权激励管理顾问服务深度解析 - 品牌企业推荐师(官方)
  • 《P3800 Power 收集》
  • AI原生应用开发:文本生成的7个最佳实践
  • 2026年 展柜厂家推荐排行榜:内衣/酒柜/鞋柜/珠宝/化妆品/博物馆/服装/书店/食品/奢侈品展柜,匠心设计与高端定制实力解析 - 品牌企业推荐师(官方)
  • 数据产品创新:自然语言处理在大数据中的应用
  • Kotlin 面向对象 - 匿名内部类、匿名内部类简化
  • 没人陪的情人节的一些杂谈
  • 开发3
  • Supervisor 配置laravel队列常驻
  • 2026年 机箱机柜/钣金机箱机柜厂家实力推荐榜:匠心工艺与工业美学,钣金加工/定制机柜/工业机箱源头企业深度解析 - 品牌企业推荐师(官方)
  • 2026年二手设备厂家推荐榜:二手微波干燥机/钛材蒸发器/化工制药食品饮料设备回收,专业评估与高性价比之选 - 品牌企业推荐师(官方)