首页 > 其他分享 >「网络流 24 题」搭配飞行员 (二分匹配 最大匹配)

「网络流 24 题」搭配飞行员 (二分匹配 最大匹配)

时间:2023-02-14 13:02:49浏览次数:37  
标签:24 二分 匹配 int 副驾驶员 maxn include match 驾驶员

题目描述

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

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

输入格式

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

输出格式

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

样例

样例输入                                      样例输出

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

题解:二分匹配最大匹配模板。

#include <cstdlib>
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
const int maxn = 300;
vector<int>E[maxn];
int used[maxn];
int match[maxn];
int n,m;
void add_edge(int u,int v)
{
    E[u].push_back(v);
    E[v].push_back(u);
}
bool dfs(int x)
{
    used[x] = 1;
    for(int i = 0; i < E[x].size(); i ++)
    {
        int u = E[x][i];
        int v = match[u];
        if(v == -1 || used[v] == -1 && dfs(v))
        {
            match[u] = x;
            match[x] = u;
            return true;
        }
    }
    return false;
}
int max_match()
{
    int res = 0;
    memset(match,-1,sizeof(match));
    for(int i = 1; i <= m; i ++)
    {
        if(match[i] == -1)
        {
            memset(used,-1,sizeof(used));
            if(dfs(i))
                res ++;
        }
    }
    return res;
}
int main()
{
    scanf("%d %d",&n, &m);
    int u,v;
    while(scanf("%d %d",&u,&v)!=EOF)
    {
        add_edge(u,v);
    }
    int ans = max_match();
    printf("%d\n",ans);
    return 0;
}

 

标签:24,二分,匹配,int,副驾驶员,maxn,include,match,驾驶员
From: https://blog.51cto.com/u_15965659/6056627

相关文章

  • 最大匹配(简单版)
    二分匹配——最大匹配#include<cstdlib>#include<iostream>#include<cstdio>#include<vector>#include<cstring>usingnamespacestd;constintmaxn=300;......
  • 数据结构实验之栈与队列四:括号匹配(SDUT 2134)
    #include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;chars[100];chara[100];intmain(){inti,j,k,f,top,len;while(gets(s)!='\0'......
  • day24
    1、leetcode77组合classSolution{List<Integer>path=newLinkedList<Integer>();//用来存放符合条件结果List<List<Integer>>res=newArrayList<>();......
  • 【LeeCode】724. 寻找数组的中心索引
    【题目描述】给你一个整数数组 ​​nums​​ ,请计算数组的 中心下标 。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下......
  • 经典-量子混合二分类网络预测肺炎
    本教程使用MindQuantum复现了论文AClassical-QuantumConvolutionalNeuralNetworkforDetectingPneumoniafromChestRadiographs中的网络结构。准备工作安装MindQ......
  • 二分查找
    二分查找思路:找到最后一个小于等于IP的元素找到第一个大于等于IP的元素前提条件:数据有序随机访问实现:递归实现非递归(循环实现)注意事项:循环退出条件mid......
  • P2430 严酷的训练 题解
    题目背景Lj的朋友WKY是一名神奇的少年,在同龄人之中有着极高的地位。。。题目描述他的老师老王对他的程序水平赞叹不已,于是下决心培养这名小子。老王的训练方式很奇怪,他......
  • 黑苹果提示宗卷哈希值不匹配的问题
    原文来源于黑果魏叔官网,转载需注明出处。提示系统所在宗卷哈希值不匹配的错误,开机后会不定时出现。发生在monterey12系统,而且有蓝牙设备的笔记本和台式机上。目前没有发现......
  • CI2454 低成本高性能SOC产品 遥控产品的绝佳选择
      Ci2454是一款集成无线收发器和8位RISC(精简指令集)MCU的SOC芯片。无线收发器特性:工作在2.4GHzISM频段。调制方式:GFSK/FSK。数据速率:2Mbps/1Mbps/250......
  • 6-10 二分查找 (20分)
    本题要求实现二分查找算法。函数接口定义:PositionBinarySearch(ListL,ElementTypeX);其中List结构定义如下:typedefintPosition;typedefstructLNode*......