题干:

题目背景

第二次世界大战时期..

题目描述

英国皇家空军从沦陷国征募了大量外籍飞行员。由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞行员,另1名是外籍飞行员。在众多的飞行员中,每一名外籍飞行员都可以与其他若干名英国飞行员很好地配合。如何选择配对飞行的飞行员才能使一次派出最多的飞机。对于给定的外籍飞行员与英国飞行员的配合情况,试设计一个算法找出最佳飞行员配对方案,使皇家空军一次能派出最多的飞机。

对于给定的外籍飞行员与英国飞行员的配合情况,编程找出一个最佳飞行员配对方案,使皇家空军一次能派出最多的飞机。

输入输出格式

输入格式:

第 1 行有 2 个正整数 m 和 n。n 是皇家空军的飞行员总数(n<100);m 是外籍飞行员数(m<=n)。外籍飞行员编号为 1~m;英国飞行员编号为 m+1~n。

接下来每行有 2 个正整数 i 和 j,表示外籍飞行员 i 可以和英国飞行员 j 配合。最后以 2个-1 结束。

输出格式:

第 1 行是最佳飞行员配对方案一次能派出的最多的飞机数 M。接下来 M 行是最佳飞行员配对方案。每行有 2个正整数 i 和 j,表示在最佳飞行员配对方案中,飞行员 i 和飞行员 j 配对。如果所求的最佳飞行员配对方案不存在,则输出‘No Solution!’。

输入输出样例

输入样例#1: 复制

5 10
1 7
1 8
2 6
2 9
2 10
3 7
3 8
4 7
4 8
5 10
-1 -1

输出样例#1: 复制

4
1 7
2 9
3 8
5 10 

题目大意:

给一个二分图,求最大匹配并且输出方案。

解题报告:

直接网络流建图,注意边上的流量都是1,然后输出方案的时候就看每个左侧顶点连出的边是否流量是0就可以了。流量是0说明有流量流过,也就是匹配了这一对点。

题目描述的边的流量设为inf也可以,但是这样判断的时候就是要判断反边的流量是否不为0.

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define F first
#define S second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 2e5 + 5;
int n,m;
int tot;
struct Edge {int to,ne,w;
} e[100005 * 2];
int head[10005];
int st,ed;
int dis[10050],q[10005];//一共多少个点跑bfs,dis数组和q数组就开多大。
void add(int u,int v,int w) {e[++tot].to=v;e[tot].w=w;e[tot].ne=head[u];head[u]=tot;
}
bool bfs(int st,int ed) {memset(dis,-1,sizeof(dis));int front=0,tail=0;q[tail++]=st;dis[st]=0;while(front<tail) {int cur = q[front];if(cur == ed) return 1;front++;for(int i = head[cur]; i!=-1; i = e[i].ne) {if(e[i].w&&dis[e[i].to]<0) {q[tail++]=e[i].to;dis[e[i].to]=dis[cur]+1;}}}if(dis[ed]==-1) return 0;return 1;
}
int dfs(int cur,int limit) {//limit为源点到这个点的路径上的最小边权 if(limit==0||cur==ed) return limit;int w,flow=0;for(int i = head[cur]; i!=-1; i = e[i].ne) {        if(e[i].w&&dis[e[i].to]==dis[cur]+1) {w=dfs(e[i].to,min(limit,e[i].w));e[i].w-=w;e[i^1].w+=w;flow+=w;limit-=w;if(limit==0) break;}}if(!flow) dis[cur]=-1;return flow;
}
int dinic() {int ans = 0;while(bfs(st,ed)) ans+=dfs(st,0x7fffffff);return ans;
}
int main()
{cin>>m>>n;st=0;ed=n+1;tot=1;for(int i = 0; i<=n; i++) head[i] = -1;for(int i = 1; i<=m; i++) add(st,i,1),add(i,st,0);for(int i = m+1; i<=n; i++) add(i,ed,1),add(ed,i,0);for(int a,b;; ) {scanf("%d%d",&a,&b);if(a == -1 && b == -1) break;add(a,b,1);add(b,a,0);}int ans = dinic();if(ans == 0) puts("No Solution!");else {printf("%d\n",ans);    for(int u = 1; u<=m; u++) {for(int i = head[u]; ~i; i = e[i].ne) {int v = e[i].to;if(v == st) continue;if(e[i].w == 0) {printf("%d %d\n",u,v);}}}}return 0;
}

【洛谷 - P2756】飞行员配对方案问题(网络流最大流,输出方案)相关推荐

  1. 洛谷 P2756 飞行员配对方案问题 (二分图/网络流,最佳匹配方案)

    P2756 飞行员配对方案问题 题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其 ...

  2. 洛谷 - P2756 飞行员配对方案问题(二分图最大匹配+路径打印)

    题目链接:点击查看 题目大意:给出n个飞行员,m个外籍飞行员,每个外籍飞行员可以和多个英国飞行员匹配,每架飞机需要两名一名外籍飞行员和一名英国飞行员同时操作,问如何匹配才能使得一次能尽可能多的派出飞机 ...

  3. 洛谷 P2756 飞行员配对方案问题 二分图 匈牙利算法 链式前向星 汉子找妹子模型 最大流模板 FF算法

    题目链接: https://www.luogu.com.cn/problem/P2756 方法一: 算法:1:匈牙利算法 思路:1:汉子找妹子模型 #include<bits/stdc++.h& ...

  4. P2756 飞行员配对方案问题【网络流24题】

    P2756 飞行员配对方案问题 文章目录 题目背景 题解: 代码: 题目背景 第二次世界大战期间,英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相 ...

  5. P2756 飞行员配对方案问题

    题目链接:P2756 飞行员配对方案问题 题意 一共有 n n n 个飞行员,其中有 m m m 个外籍飞行员和 ( n − m ) (n - m) (n−m) 个英国飞行员,外籍飞行员从 1 1 1 ...

  6. 【网络流24题】解题报告:A、飞行员配对方案问题(最大流求二分图最大匹配)

    A.飞行员配对方案问题 (二分图最大匹配)(最大流)[提高+/省选- ] 题目链接 [问题分析] 二分图最大匹配问题. [建模方法] 在二分图的基础上增加源S和汇T. 1.S向X集合中每个顶点连一条容 ...

  7. 网络流24题(1) P2756 飞行员配对方案问题

    题目链接 题意:求一个最大的二分匹配,网络流最大流,自己造一个源点一个汇点,源点0到1~m流为1,m+1~n到汇点n+1流为1,然后就是题目给出的也是流为1,图就是这样的,套dinic一个板子,但是题 ...

  8. 网络流24题 飞行员配对方案问题

    «问题描述: 第二次世界大战时期,英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出 的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞 行员,另1 名是外籍飞 ...

  9. 网络流24题-飞行员配对方案问题

    飞行员配对方案问题 时空限制1000ms / 128MB 题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能 ...

最新文章

  1. php8支持哪些新特征,PHP8 新特性总结(一)
  2. Linux IPC POSIX 消息队列
  3. .NET Core 3.0特性初探:C# 8、WPF、Windows Forms、EF Core
  4. 排序算法:归并排序、快速排序
  5. 自动关机脚本2007-10-28 10:04@ECHO off
  6. 15道AI 机器学习笔试题(暂时没有答案)
  7. 斐波那契数列(剑指offer)
  8. .net core webapi 导出excel(两种方式EPPLUS、NPOI),返回下载地址或文件流
  9. 20200528每日一句
  10. 6天掌握记忆宫殿,你就是记忆大师
  11. Tools介绍:最快的DicomViewer软件 - RadiAnt Dicom Viewer
  12. python朋友圈头像_Python之微信-微信好友头像合成
  13. 通信专业能报国考的计算机类吗,通信工程专业可以报考计算机科学技术类公务员职位么...
  14. python xlsm_Excel中的xls、xlsx、xlsm混合文件,看我如何用Python统一处理!
  15. 爬虫基础以及Xpath、Beautiful Soup的应用
  16. Tensorflow.keras小案例Mnist数字识别
  17. css firefox火狐浏览器下的兼容性问题
  18. windpy 连接数据库_python wind数据库
  19. TortoiseSVN教程级别指南
  20. [Un-Routed Net Constraint Violation] 问题解决

热门文章

  1. 开源CRM Hipergate
  2. c语言程序改错例题,C语言程序改错习题
  3. javascript进制转换_「js基础」JavaScript逻辑和位运算符归纳
  4. mysql 8.0.12解压版安装教程_mysql 8.0.12 解压版安装教程
  5. python启动多个进程_Python程序中的进程操作--—--开启多进程
  6. 3d人脸识别算法opencv_热招职位算法类
  7. 手机进程设置多少个最好_安卓手机难逃卡顿宿命?打开4个系统设置,秒变新机般流畅...
  8. sqlite3 journal
  9. 信号中断 与 慢系统调用
  10. 一面微创题--字符串逆序输出