ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

搭配飞行员

2021-07-13 08:01:33  阅读:187  来源: 互联网

标签:搭配 mi 副驾驶员 飞行员 这一题 输入 驾驶员


前言:

日月如梭,光阴似箭。大家好,我盛艺承又回来了。今天给大家讲一下搭配飞行员这道题。

我们先来看题目

题目描述

飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员。由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞行,问如何搭配驾驶员才能使出航的飞机最多。

因为驾驶工作分工严格,两个正驾驶员或两个副驾驶员都不能同机飞行。
 

输入

第一行,两个整数 n 与 m,表示共有  n 个飞行员,其中有 m 名飞行员是正驾驶员。
下面有若干行,每行有 2 个数字 a 、b。表示正驾驶员 a 和副驾驶员 b 可以同机飞行。
注:正驾驶员的编号在前,即正驾驶员的编号小于副驾驶员的编号。

输出

仅一行一个整数,表示最大起飞的飞机数。
 

样例输入

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

样例输出

4
这一题其实不难做。只需要2重循环就可以完成了。我连网络流都不用。而且居然不会TLE!直接大喊一声666。 好了,闲话不多说。我们讲一下思路。 思路: 这一题有一个陷阱。通过题目概述里的“若干个飞行员”可以确定——这一题的输入要用到EOF和While循环。至于怎么写,就不用我提及了吧。如果这还要我说,那你就关闭电脑好好看看学习吧。 要提醒的一点是——在输入的时候,要把输入的两个数用一个二维数组存起来。 为什么是一个二维数组呢?因为我们可以吧第一个维度用来标机飞行员,而第二个维度用来统计每个飞行员可配对的数量。因为数组的第0项我们用不到,所以可以直接拿来当统计飞行员配对的数量。 接下来用一个1~m的for循环。 再来一个1~f[i][0]的j循环。 在循环里面判断一下我们设定的标记是否为0。 因为如果为0的话,就表示这个飞行员没有被配对过。 当然,为了让每个都能匹配的飞行员都匹配上,也就是说不被别的飞行员抢了,我们需要定义一个mi变量,用来记录最少人匹配的飞行员。然后把j记下来。 mi也别忘了初始值。 之后,用一个if语句直接判断mi是否为初始值。 如果不是的话,就证明他已经有找到了。那么我们就让ans++。最后别忘了,还要把标记的数组设为1,表示被匹配过了。 下面是代码:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,m,a,b,f[101][101],i,j,mi,ans,vis[101],bj;
 4 int main(){
 5     cin>>n>>m;
 6     while(scanf("%d%d",&a,&b)!=EOF){//无线输入,一直到输入“Ctrl+z”。 
 7         f[a][++f[a][0]]=b;//标记一下a和b。
 8         f[b][++f[b][0]]=a;
 9     }
10     for(i=1;i<=m;i++){
11         mi=1e9;//mi的初值要为最大的数,1e9=100000000
12         for(j=1;j<=f[i][0];j++){//这里是到第i个飞行员匹配人数的总个数。 
13             if(vis[f[i][j]]==0){//如果没有被匹配过 
14                 if(f[f[i][j]][0]<=mi){//判断是否小于当前的最小值。 
15                     mi=f[i][j];//是的话,把mi设为这个当前的最小值。 
16                     bj=j;
17                 }
18             }
19         }
20         if(mi!=1e9){//判断是否有这个最小值 
21             vis[f[i][bj]]=1;//有的话,要把vis标记数组设为1,表示匹配过了。 
22             ans++;
23         }
24     }
25     cout<<ans;
26 }

以上就是此题的解法,感谢大家的观看。跪求三连。

标签:搭配,mi,副驾驶员,飞行员,这一题,输入,驾驶员
来源: https://www.cnblogs.com/Andysyc/p/15004784.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有