[返回网络流 24 题索引]

题目描述

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

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

输入格式

第 111 行有 222 个正整数 mmm 和 nnn。nnn 是皇家空军的飞行员总数 (n&lt;100)(n&lt;100)(n<100);mmm 是外籍飞行员数 (m≤n)(m\leq n)(m≤n)。外籍飞行员编号为 1∼m1\sim m1∼m;英国飞行员编号为 m+1∼nm+1\sim nm+1∼n。

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

输出格式

第 111 行是最佳飞行员配对方案一次能派出的最多的飞机数 MMM。接下来 MMM 行是最佳飞行员配对方案。每行有 222 个正整数 iii 和 jjj,表示在最佳飞行员配对方案中,飞行员 iii 和飞行员 jjj 配对。如果所求的最佳飞行员配对方案不存在,则输出No Solution!

输入样例

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

输出样例(Special Judge)

4
1 7
2 9
3 8
5 10

Solution P2756\text{Solution P2756}Solution P2756



将英国飞行员放在左边一组,外籍飞行员放右边一组,完成建图。

#include<cstdio>
#include<cstdlib>
#include<cstring> #define reg register struct node{
int x,y,d,next,other;
}e[22000];
int len=0;
int n,m;
int first[210];
int h[210];
int q[1000010];
int st,ed;
int s1,s2;
const int ST=201,ED=202;
int mh[210]; void ins(int x,int y,int d){
e[++len].x=x;e[len].y=y;e[len].d=1;
e[len].next=first[x];first[x]=len;
e[++len].x=y;e[len].y=x;e[len].d=0;
e[len].next=first[y];first[y]=len;
e[len].other=len-1;
e[len-1].other=len;
}
bool bfs(){
memset(h,0,sizeof(h));h[ST]=1;
st=1;ed=2;q[st]=ST;
while(st!=ed){
int x=q[st];
for(reg int i=first[x];i;i=e[i].next){
int y=e[i].y;
if(!h[y]&&e[i].d){
h[y]=h[x]+1;
q[ed++]=y;
}
}
++st;
}
if(h[ED]>0) return 1;
return 0;
}
#define min(x,y) ((x)<(y)?(x):(y)) int dfs(int x,int f){
if(x==ED) return f;
int tt=0;
for(reg int i=first[x];i;i=e[i].next){
int y=e[i].y;
if(h[y]==h[x]+1&&e[i].d>0&&f>tt){
int my=dfs(y,min(f-tt,e[i].d));
e[i].d-=my;
e[e[i].other].d+=my;
tt+=my;
if(my&&x!=ST&&x!=ED&&y!=ST&&y!=ED)
mh[x]=y;
if(tt==f) return f;
}
}
if(!tt) h[x]=0;
return tt;
}
int main(){
scanf("%d%d",&m,&n);
do{
scanf("%d%d",&s1,&s2);
if(s1==-1&&s2==-1) break;
ins(s1,s2,1);
}while(s1!=-1||s2!=-1);
for(reg int i=1;i<=m;++i)
ins(ST,i,1);
for(reg int i=m+1;i<=n;++i)
ins(i,ED,1);
int ans=0;
while(bfs()) ans+=dfs(ST,0x3f3f3f3f);
if(!ans){
puts("No Solution!");
exit(0);
}
printf("%d\n",ans);
for(reg int i=1;i<=m;++i)
if(mh[i])
printf("%d %d\n",i,mh[i]);
}

[网络流 24 题] luoguP2756 飞行员配对方案问题的更多相关文章

  1. 【PowerOJ1736&网络流24题】飞行员配对方案问题(最小割)

    题意: n<=100,要求输出方案 思路:准备把没刷的24题从头搞一遍 输出方案的话就在增广的时候记一下另一端的编号就好 #include<bits/stdc++.h> using ...

  2. [COGS 0014][网络流24题] 搭配飞行员

    先贴题面 14. [网络流24题] 搭配飞行员 ★★☆   输入文件:flyer.in   输出文件:flyer.out简单对比时间限制:1 s   内存限制:128 MB [问题描述]     飞行 ...

  3. Cogs 14. [网络流24题] 搭配飞行员(二分图匹配)

    [网络流24题] 搭配飞行员 ★★☆ 输入文件:flyer.in 输出文件:flyer.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 飞行大队有若干个来自各地的驾驶员,专门 ...

  4. cogs 14. [网络流24题] 搭配飞行员 二分图最大匹配 匈牙利算法

    14. [网络流24题] 搭配飞行员 ★★   输入文件:flyer.in   输出文件:flyer.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述]     飞行大队有 ...

  5. 网络流24题第一题(luogu2796飞行员配对方案)

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

  6. Cogs 14. [网络流24题] 搭配飞行员

    这道题其实蛮好想的,因为分为正,副飞行员.所以就把正飞行员当作Boy,副飞行员当作Girl.然后做Hungry即可. #include<bits/stdc++.h> using names ...

  7. LuoguP2756 飞行员配对方案问题(最大流)

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

  8. COGS14. [网络流24题] 搭配飞行员

    [问题描述]     飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员.由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞 ...

  9. COGS——C 14. [网络流24题] 搭配飞行员

    http://cogs.pro/cogs/problem/problem.php?pid=14 ★★☆   输入文件:flyer.in   输出文件:flyer.out   简单对比时间限制:1 s  ...

随机推荐

  1. Day 13 linux 的输入输出与管道的使用

    1.重定向概述 1.什么是重定向 将原本要输出到屏幕的数据信息,重新定向到某个指定的文件中.比如:每天凌晨定时备份数据,希望将备份数据的结果保存到某个文件中.这样第二天通过查看文件的内容就知道昨天备份 ...

  2. ActiveMQ+ZooKeeper搭建高可用集群

    一.说明 实际的应用中,一般为了应用的高可用性,都会搭建集群环境去处理.部署多台应用,这样,即使一台有问题,其他热备应用可以立马顶上,继续提供服务. ActiveMQ的集群部署,基于zookeeper ...

  3. MyBatis 插件使用-简单的分页插件

    目录 1 分页参数的传递 2 实现 Interceptor 接口 2.1 Interceptor 接口说明 2.1 注解说明 2.3 实现分页接口 PageInterceptor 3. 更改配置 4 ...

  4. 基于Spark的电影推荐系统(电影网站)

    第一部分-电影网站: 软件架构: SpringBoot+Mybatis+JSP 项目描述:主要实现电影网站的展现 和 用户的所有动作的地方 技术选型: 技术 名称 官网 Spring Boot 容器 ...

  5. 性能测试:Jmeter-Beanshell请求加密实例

    进行性能测试时,有可能遇到一种场景:接口请求由于安全问题,需要进行加密发送. 这种场景下,使用Jmeter实现性能测试,则也需要使用同样的加密规则发送请求报文. 要实现此类性能测试有几种策略: 直接去 ...

  6. aapt的具体使用

    一.什么是aapt: aapt Android Asset Packaging Tool android的一个资源打包工具 二.配置aapt路径: aapt这个工具,在sdk的build-tools下 ...

  7. c# 9.0 特性提案 简化空参数验证代码

    简而言之就是将已存在的特性null参数验证,使用一个简单的语义标注进一步简化. 对于如下这段代码 // Before void Insert(string s) { if (s is null) { ...

  8. linux mint安装ffmpge

    sudo add-apt-repository ppa:mc3man/trusty-media sudo apt-get update sudo apt-get install ffmpeg

  9. WebGL简易教程(五):图形变换(模型、视图、投影变换)

    [toc] 1. 概述 通过之前的教程,对WebGL中可编程渲染管线的流程有了一定的认识.但是只有前面的知识还不足以绘制真正的三维场景,可以发现之前我们绘制的点.三角形的坐标都是[-1,1]之间,Z值 ...

  10. 正睿OI DAY3 杂题选讲

    正睿OI DAY3 杂题选讲 CodeChef MSTONES n个点,可以构造7条直线使得每个点都在直线上,找到一条直线使得上面的点最多 随机化算法,check到答案的概率为\(1/49\) \(n ...