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

P2756 飞行员配对方案问题

这是一道经典的二分图最大匹配问题。

题目分析

题目要求将外籍飞行员与英国飞行员进行配对,使得配对总数最大。

  • 节点分布:左侧是 \(1\)\(m\) 号外籍飞行员,右侧是 \(m+1\)\(n\) 号英国飞行员。
  • :如果外籍飞行员 \(u\) 能与英国飞行员 \(v\) 配合,则在 \(u\)\(v\) 之间连一条边。
  • 目标:寻找该二分图的最大匹配数,并输出具体的匹配方案。

算法选择

由于数据范围较小(\(n < 100\)),有两种主流解法:

  1. 匈牙利算法 (Hungarian Algorithm):实现简单,处理二分图匹配非常直观,时间复杂度为 \(O(VE)\),在本题完全绰绰有余。
  2. 网络最大流 (Dinic / ISAP):建立超源点 \(S\) 连向所有外籍飞行员,超汇点 \(T\) 由所有英国飞行员连向,容量均为 1。飞行员之间的边容量也为 1。最大流即为最大匹配。

这里推荐使用匈牙利算法,因为它在记录匹配方案时更加方便。


C++ 代码实现(匈牙利算法)

#include <iostream>
#include <vector>
#include <cstring>using namespace std;// 全局变量定义
int m, n;
vector<int> adj[105]; // 邻接表,记录每个外籍飞行员可以配合的英国飞行员
int match[105];       // match[v] 记录英国飞行员 v 所匹配的外籍飞行员编号
bool vis[105];        // 标记在一次 DFS 中,该英国飞行员是否已被访问// 匈牙利算法核心:DFS 寻找增广路
bool dfs(int u) {for (int v : adj[u]) {if (!vis[v]) {vis[v] = true;// 如果英国飞行员 v 还没配对,或者他原配可以去找别人if (match[v] == 0 || dfs(match[v])) {match[v] = u; // 更新配对关系return true;}}}return false;
}int main() {// 1. 输入处理cin >> m >> n;int u, v;while (cin >> u >> v && (u != -1 && v != -1)) {adj[u].push_back(v); // 建立从外籍飞行员到英国飞行员的单向边即可}// 2. 循环遍历每一个外籍飞行员,尝试匹配int max_matches = 0;for (int i = 1; i <= m; ++i) {memset(vis, 0, sizeof(vis)); // 每次寻找增广路前重置访问标记if (dfs(i)) {max_matches++;}}// 3. 输出结果cout << max_matches << endl;for (int i = m + 1; i <= n; ++i) {if (match[i] > 0) {// 输出格式:外籍飞行员 英国飞行员cout << match[i] << " " << i << endl;}}return 0;
}

代码详解

  1. 图的存储:由于题目明确 \(u \le m\)\(v > m\),我们只需要建立从 \(u\)\(v\) 的单向邻接表即可。
  2. dfs(u) 函数
    • 对于外籍飞行员 \(u\),遍历他所有能配合的英国飞行员 \(v\)
    • 如果 \(v\) 在这一轮匹配中还没被“商量”过(!vis[v]),就尝试把 \(u\) 分配给 \(v\)
    • 分配成功的条件是:\(v\) 目前单身(match[v] == 0),或者 \(v\) 的现任对象可以腾出位置(dfs(match[v]))。
  3. 统计与输出
    • max_matches 记录成功匹配的总数。
    • 最后遍历 match 数组(下标为 \(m+1\)\(n\)),如果 match[i] 不为 0,说明英国飞行员 \(i\) 有匹配对象。

复杂度分析

  • 时间复杂度\(O(m \times e + n)\),其中 \(e\) 是配合关系的条数。对于 \(n < 100\) 的规模,运行时间几乎可以忽略不计。
  • 空间复杂度\(O(n + e)\),主要用于存储邻接表。
http://www.jsqmd.com/news/432667/

相关文章:

  • 馏分/组分/自动/样品收集器选型指南:上海金鹏核心产品深度解析 - 品牌推荐大师
  • 一个命令,切换整个世界:CCSwitch 到底是什么?
  • 2026年碟形弹簧/碟簧垫圈/蝶形垫片/碗形垫圈厂家推荐排行榜:不锈钢、耐高温及主轴碟簧专业实力与创新工艺深度解析 - 品牌企业推荐师(官方)
  • 2026年 无机纤维喷涂厂家实力推荐榜:硬质/外墙/高铁机场/电梯井/地下室/车库顶板/厂房/矿物/隔音/超细无机纤维棉喷涂全方位解析 - 品牌企业推荐师(官方)
  • 两数之和
  • Mac部署ollama本地大模型
  • 史上最细,银行测试-核心系统与网上银行业务,一篇策底打通...
  • 制造业/政务/跨国企业如何选?2026低代码软件行业适配指南
  • Blender角色肖像全流程教程
  • ClawX 本地部署实战:OpenClaw 安装、API 配置与用法详解
  • GISer必备收藏:5款主流GIS工具优缺点全解析
  • 2026年东莞宠物项圈厂家推荐榜:防水宠物项圈、项圈外贸、项圈定制、项圈OEM工厂、项圈ODM工厂创新选择指南 - 海棠依旧大
  • 2026年东莞牵引绳厂家推荐榜:PVC牵引绳、防爆冲牵引绳、多功能牵引绳、户外牵引绳、宠物牵引绳、牵引绳外贸、牵引绳定制、牵引绳ODM工厂、牵引绳OEM工厂制造与场景化出行解决方案 - 海棠依旧大
  • 2026年东莞宠物胸背厂家推荐榜:印花宠物胸背、轻便型宠物胸背、防挣脱胸背、宠物胸背外贸、宠物胸背定制、宠物胸背OEM工厂、宠物胸背ODM工厂打造舒适出行体验 - 海棠依旧大
  • 干燥机品牌哪家强?2026年这些品牌表现亮眼,闪蒸干燥机/流化床干燥机/干燥机/热风循环烘箱,干燥机源头厂家推荐榜单 - 品牌推荐师
  • 第二节:Prompt Engineer核心剖析(提示词介绍、调优、攻击和防御)
  • 2026丙酮直销厂家实力榜:品质之选在这里,丁酯/清洗剂/混合酯/120#白电油/防白水/碳酸二甲酯,丙酮企业推荐排行榜 - 品牌推荐师
  • 农业气象监测站怎么用
  • 2026北京发电机出租厂家推荐榜:发电机租赁、大型发电机出租、静音发电机出租、柴油发电机出租、ups应急电源出租优选服务商 - 海棠依旧大
  • 2026张家口怀来县公司注册优选推荐:注册公司、代办执照、代办营业执照、公司注销变更选择指南,智诚会计助力企业腾飞 - 海棠依旧大
  • 一个伊朗人攒了一辈子的钱正在慢慢变成废纸
  • 2026张家口怀来县代理记账机构推荐:会计记账、会计培训参考指南,智诚会计守护企业财税合规发展 - 海棠依旧大
  • 高光谱图像分类MATLAB代码实现(多方法对比)
  • 管道巡检效率提升 50%:图扑 3D 大屏让运维人员不用再“扒图纸“
  • 测试老鸟,性能测试面试题+回答分析,项目案例(详细)
  • 基于Rothman-Keller模型的LBM两相流模拟实现
  • 从 0 到生产,用这个方法让 AI Agent 少走了 3 个月弯路!
  • 2026年开篇|一文盘点:2025年开源LLM模型年度回顾
  • 氨氮超标的处理方法,污水处理达标必看指南
  • 开发者实战:基于IEC 61162规范构建边缘计算与隔离的合规海事网关架构