«问题描述:
第二次世界大战时期,英国皇家空军从沦陷国征募了大量外籍飞行员。由皇家空军派出
的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞
行员,另1 名是外籍飞行员。在众多的飞行员中,每一名外籍飞行员都可以与其他若干名英
国飞行员很好地配合。如何选择配对飞行的飞行员才能使一次派出最多的飞机。对于给定的
外籍飞行员与英国飞行员的配合情况,试设计一个算法找出最佳飞行员配对方案,使皇家空
军一次能派出最多的飞机。
«编程任务:
对于给定的外籍飞行员与英国飞行员的配合情况,编程找出一个最佳飞行员配对方案,
使皇家空军一次能派出最多的飞机。
«数据输入:
由文件input.txt提供输入数据。文件第1 行有2个正整数m和n。n是皇家空军的飞行
员总数(n<100);m是外籍飞行员数。外籍飞行员编号为1~m;英国飞行员编号为m+1~n。
接下来每行有2 个正整数i和j,表示外籍飞行员i可以和英国飞行员j配合。文件最后以2
个-1 结束。
«结果输出:
程序运行结束时,将最佳飞行员配对方案输出到文件output.txt 中。第1 行是最佳飞行
员配对方案一次能派出的最多的飞机数M。接下来M 行是最佳飞行员配对方案。每行有2
个正整数i和j,表示在最佳飞行员配对方案中,飞行员i和飞行员j 配对。
如果所求的最佳飞行员配对方案不存在,则输出‘No Solution!’。

输入文件示例 
input.txt 
5 10
1 7
1 8
2 6
2 9
2 10
3 7
3 8
4 7
4 8
5 10
-1 -1

输出文件示例

output.txt
4
1 7
2 9
3 8
5 10

表示有多组解,只会打最大流…所以CODEVS上没有过…哭~

网络流在北大爷的教导下终于完成了第一题233,不知道对不对,家里CENA爆炸了,周末带到学校去测测好了……

代码如下:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<cmath>
 5 using namespace std;
 6 const int maxx=0x7fffffff;
 7 int n,m,x,y,ans;int tot;
 8 struct wakaka{
 9     int to,next,v;
10 }e[40010];
11 int ha[210],queue[210],head[210],father[210];
12 void addedge(int u,int v,int w){
13     tot++;e[tot].to=v;e[tot].v=w;e[tot].next=head[u];head[u]=tot;
14     tot++;e[tot].to=u;e[tot].next=head[v];head[v]=tot;
15 }
16 bool bfs(){
17     int now,t=0,w=1,p,i;
18     memset(ha,-1,sizeof(ha));
19     queue[t]=ha[0]=0;
20     while (t<w){
21         now=queue[t];
22         t++;
23         i=head[now];
24         while(i){
25             if (e[i].v&&ha[e[i].to]<0){
26                 queue[w++]=e[i].to;
27                 ha[e[i].to]=ha[now]+1;
28             }
29             i=e[i].next;
30         }
31     }
32     if (ha[n+1]==-1) return 0;
33     else
34     return 1;
35 }
36 int dfs(int x,int maxx){
37     if(x==n+1)return maxx;
38     int i=head[x];
39     int w,used=0;
40     while(i)
41     {
42             if(e[i].v&&ha[e[i].to]==ha[x]+1)
43             {
44                 w=maxx-used;
45                 w=dfs(e[i].to,min(w,e[i].v));
46                 //if (w!=0) father[x]=e[i].to;
47                 e[i].v-=w;
48                 e[i^1].v+=w;
49                 used+=w;
50                 if(used==maxx)return maxx;
51                 }
52                 i=e[i].next;
53     }
54     if(used==0)ha[x]=-1;
55     return used;
56 }
57
58
59 int main(){
60     tot=1;
61     scanf("%d %d",&m,&n);
62     scanf("%d %d",&x,&y);
63     while (x!=y and x!=-1){
64         addedge(x,y,1);
65         scanf("%d %d",&x,&y);
66     }
67     for(int i=1;i<=n;++i){
68         if (i<=m)
69             addedge(0,i,1);
70         else
71             addedge(i,n+1,1);
72     }
73     while(bfs())ans+=dfs(0,maxx);
74     if (ans!=0)
75     {printf("%d\n",ans);
76       //for (int i=1;i<=m;++i)
77       //if (father[i])
78       //printf("%d %d\n",i,father[i]);
79     }
80     else
81     printf("No Solution!");
82     return 0;
83 } 

转载于:https://www.cnblogs.com/fakerv587/p/5202055.html

网络流24题 飞行员配对方案问题相关推荐

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

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

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

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

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

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

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

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

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

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

  6. 解题报告:线性规划与网络流24题

    目录 A.飞行员配对方案问题 (二分图最大匹配)(最大流)[提高+/省选- ] B.太空飞行计划问题(最大权闭合图转最小割.最小割方案输出)[省选/NOI- ] C.最小路径覆盖问题(有向无环图最小路 ...

  7. 「网络流24题」 题目列表

    「网络流24题」 题目列表 序号 题目标题 模型 题解 1 飞行员配对方案问题 二分图最大匹配 <1> 2 太空飞行计划问题 最大权闭合子图 <2> 3 最小路径覆盖问题 二分 ...

  8. 【题解】网络流24题一句话题解集合

    最近写了下<线性规划与网络流24题>,发下代码和题解,事实上就是将交给cycycy的题解复制一下 T1 飞行员配对方案问题 solution 裸的匈牙利 code #include< ...

  9. cwl的网络流24题练习

    网络流24题 编号 题目 备注 1 飞行员配对方案问题 二分图最大匹配,可最大流解决 2 太空飞行计划问题   3 最小路径覆盖问题  有向图最小路径覆盖,解法都写题目上了 4 魔术球问题  有向图最 ...

最新文章

  1. getrlimit读取进程能打开的最大文件描述符
  2. 晶体封装越小esr越大_SuperFin晶体管技术加持!英特尔新一代10nm可媲美台积电5nm?...
  3. 3-间隔插入排序C实现(希尔排序铺垫)
  4. Intellij 中的git操作 转!
  5. leetcode题库1314-- 矩阵区域和
  6. 2018-12-28
  7. unity3d多个版本共存
  8. fme坐标转换器_利用FME做坐标转换
  9. 双击java安装包没有反应_雨林木风Win7下双击JER安装包没有反应的解决技巧
  10. Echarts直角坐标系x轴y轴属性设置大全
  11. 数据结构 javascript 描述[Data-Structure described byJavaScript]
  12. 硬盘分区总结(小东子)
  13. 怎样用python制表_用Python绘图和制表(附泰坦尼克号案例)
  14. 印象派绘画在现代艺术发展中的地位和作用
  15. mysql的groupby_MYSQL GROUP BY用法详解
  16. [日推荐] 『闲聊助手』人工智能小程序,仅此一款!-极乐商店store.dreawer.com
  17. @Transactional注解什么情况会失效?
  18. 最适合freshman的Java习题集(四)数组
  19. 中国大学moocpython笔记_中国大学MOOC的APP(慕课)用Python玩转数据章节答案
  20. android 应用变量,应用变量(com.sollyu.xposed.hook.model) - 3.3.2 - 应用 - 酷安

热门文章

  1. Color Pilot 5中文版
  2. 二、Windows下TortoiseGit的安装与配置
  3. Ubuntu安装VLC播放器
  4. [转]为什么Java中的HashMap默认加载因子是0.75
  5. 访问Storm ui界面,出现Nimbus Summary或Supervisor Summary时有时无的问题解决(图文详解)...
  6. Ubuntu 16.04 LTS今日发布
  7. import com.sun.image.codec.jpeg.JPEGCodec不通过 找不到包
  8. MySQL 5.6 中的 TIMESTAMP 和 explicit_defaults_for_timestamp 参数
  9. 访问IIS元数据库失败
  10. All in one TFS 项目建立