[网络流 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 ...
随机推荐
- Linux 笔记 - 第十二章 Shell 脚本
博客地址:http://www.moonxy.com 一.前言 常见的编程语言分为两类:一类是编译型语言,如:C.C++ 和 Java等,它们远行前要经过编译器的编译.另一类是解释型语言,不需要编译, ...
- 在IIS上启用WordPress子域名模式多站点功能
昨天负责网站的支持人员向我反馈在我们负责托管网站的WordPress在启动多站点功能后,浏览新站点或访问新站点的"Dashboard"时,都会反馈“404”错误.我检查了WordP ...
- (转)在阿里云 CentOS 服务器(ECS)上搭建 nginx + mysql + php-fpm 环境
阿里云的云服务器(ECS)可以选择多种操作系统,打算用它运行 Drupal或者 WordPress ,你最好选择 Linux 系统,这篇文章的演示是基于阿里云的 CentOS 操作系统的服务器.我们在 ...
- 使用System.Text.Json处理Json文档以及部分坑
System.Text.Json处理Json文档需要用到JsonDocument,JsonElement,JsonProperty. JsonDocument就是一个表示Json文档的东西,JsonE ...
- web前端开发面试题(附答案)-1
1.浏览器中输入url到网页显示,整个过程发生了什么 域名解析 发起tcp三次握手 建立tcp连接之后发起htttp请求 服务器端响应http请求,浏览器得到html代码 浏览器器解析html代码,并 ...
- android studio 开发环境的搭建
步骤如下: 下载安装配置JDK(注意配置环境变量JAVA_HOME Path CLASSPATH) 从官网下载Android Studio(可以下载带有SDK版本的) 安装Android Studio ...
- [经验栈]SQL语句逻辑运算符"AND"、"&&"兼容性
最近打算把博客转移到typecho平台,选了一个风格个人比较喜欢的主题,即Akina for Typecho 主题模板,在这里先感谢题主的开源分享,但是在使用过程中一开始就出现"500 Da ...
- jenkins导致磁盘占满问题
背景 今天登陆jenkins提示磁盘空间不足,且构建发生错误 排查问题 cd到jenkins 安装目录 执行df -h 发现root目录沾满 执行 du -ah --max-depth=1 发现是.j ...
- Servlet与Tomcat运行示例
Servlet与Tomcat运行示例 本文将写一个servlet,然后将其部署到Tomcat的全过程.本文参考<深入拆解Tomcat_Jetty>内容. 一.基于web.xml开发步骤 下 ...
- python openpyxl内存不主动释放 ——关闭Excel工作簿后内存依旧(MemoryError)
在openpyxl对Excel读写操作过程中,发现内存没有马上释放,如果得多次读取大文件,内存爪机,后续代码就无法运行. 尝试:各种wb.save()或者with open等途径无法解决. 发现:因为 ...