[网络流 24 题] luoguP2756 飞行员配对方案问题
题目描述
英国皇家空军从沦陷国征募了大量外籍飞行员。由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的 222 名飞行员,其中 111 名是英国飞行员,另 111 名是外籍飞行员。在众多的飞行员中,每一名外籍飞行员都可以与其他若干名英国飞行员很好地配合。如何选择配对飞行的飞行员才能使一次派出最多的飞机。对于给定的外籍飞行员与英国飞行员的配合情况,试设计一个算法找出最佳飞行员配对方案,使皇家空军一次能派出最多的飞机。
对于给定的外籍飞行员与英国飞行员的配合情况,编程找出一个最佳飞行员配对方案,使皇家空军一次能派出最多的飞机。
输入格式
第 111 行有 222 个正整数 mmm 和 nnn。nnn 是皇家空军的飞行员总数 (n<100)(n<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 飞行员配对方案问题的更多相关文章
- 【PowerOJ1736&网络流24题】飞行员配对方案问题(最小割)
题意: n<=100,要求输出方案 思路:准备把没刷的24题从头搞一遍 输出方案的话就在增广的时候记一下另一端的编号就好 #include<bits/stdc++.h> using ...
- [COGS 0014][网络流24题] 搭配飞行员
先贴题面 14. [网络流24题] 搭配飞行员 ★★☆ 输入文件:flyer.in 输出文件:flyer.out简单对比时间限制:1 s 内存限制:128 MB [问题描述] 飞行 ...
- Cogs 14. [网络流24题] 搭配飞行员(二分图匹配)
[网络流24题] 搭配飞行员 ★★☆ 输入文件:flyer.in 输出文件:flyer.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 飞行大队有若干个来自各地的驾驶员,专门 ...
- cogs 14. [网络流24题] 搭配飞行员 二分图最大匹配 匈牙利算法
14. [网络流24题] 搭配飞行员 ★★ 输入文件:flyer.in 输出文件:flyer.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 飞行大队有 ...
- 网络流24题第一题(luogu2796飞行员配对方案)
飞行员配对方案 二分图裸题,可以拿最大流怼. 题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 ...
- Cogs 14. [网络流24题] 搭配飞行员
这道题其实蛮好想的,因为分为正,副飞行员.所以就把正飞行员当作Boy,副飞行员当作Girl.然后做Hungry即可. #include<bits/stdc++.h> using names ...
- LuoguP2756 飞行员配对方案问题(最大流)
题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞行员,另1名是外 ...
- COGS14. [网络流24题] 搭配飞行员
[问题描述] 飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员.由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞 ...
- COGS——C 14. [网络流24题] 搭配飞行员
http://cogs.pro/cogs/problem/problem.php?pid=14 ★★☆ 输入文件:flyer.in 输出文件:flyer.out 简单对比时间限制:1 s ...
随机推荐
- hibernate集成ehcahe进行缓存管理
ehcace是现在非常流行的缓存框架,有轻量.灵活.可扩展.支持集群/分布式等优点. 在项目中,使用ehcace可以对数据进行缓存(一般使用.基于注解.基于aop),使用filter可以对页面进行缓存 ...
- 【Java基础】关于枚举类你可能不知道的事
目录 谈谈枚举 1. 枚举类的定义 2. 枚举类的底层实现 3. 枚举类的序列化实现 4. 用枚举实现单列 5. 枚举实例的创建过程是线程安全的 谈谈枚举 如果一个类的对象个数是有限的而且是不变的,我 ...
- Widget 基础
一切皆Widget Widget 渲染过程 Flutter把视图数据的组织和渲染抽象为三部分,即 Widget.Element 和 RenderObject. Widget Widget 是空间实现的 ...
- DOM之事件(二)
今天详细讲解JavaScript中的常用事件类型和功能. 一 鼠标事件 1, click:点击事件 等同于mousedown+mouseup,不管这两个事件间隔多久,都会触发一次click事件. 2 ...
- Promise核心原理解析
作者: HerryLo 本文永久有效链接: https://github.com/AttemptWeb...... Promises对象被用于表示一个异步操作的最终完成 (或失败), 及其结果值.主要 ...
- 第八届蓝桥杯java b组第一题
1,标题: 购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大促销又来了!老板夫人开出了长长的购 ...
- linux系统下开发环境安装与配置
安装系统环境 CentOS 6.8 64位 jdk版本 7u80 64位 Tomcat版本 Tomcat7 maven版本 Apache Maven 3.6.0 vsftpd版本 vsftpd-2.2 ...
- 挖穿各大SRC的短信轰炸
今天给大家分享一个短信轰炸绕过的姿势,大疆.百度.腾讯等等src都有用此方法绕过的案例. 给大家看一下 这里就不给大家截图了,在src中提交的截图都没有打码,这里放出来不太方便. 这里就只举出大疆的例 ...
- Spring Boot 整合 Web 开发
这一节我们主要学习如何整合 Web 相关技术: Servlet Filter Listener 访问静态资源 文件上传 文件下载 Web三大基本组件分别是:Servlet,Listener,Filte ...
- 死磕 java同步系列之zookeeper分布式锁
问题 (1)zookeeper如何实现分布式锁? (2)zookeeper分布式锁有哪些优点? (3)zookeeper分布式锁有哪些缺点? 简介 zooKeeper是一个分布式的,开放源码的分布式应 ...