トピックリンク:https://loj.ac/problem/6000
質問の意味:各航空機はパイロットと第二のパイロット正を持っていますが、いくつかのパイロットが同じ航空機にすることはできません、最も多くの航空機が離陸する方法を尋ねました。
アイデア:パイロットの二部グラフが一致することができるようになります
書式#include <stdio.hに> する#include <iostreamの> 書式#include < 文字列の.h> の#include <math.h>の 書式#include < 文字列 > の#include <アルゴリズム> 書式#include <キュー> の#include <マップ> typedefの長い 長いLL ; 使用して 名前空間はstdを、 整数N、M。 int型 [ 105 ] [ 105 ]、B [ 105 ]。 BOOL VIS [ 105 ]。 空のinit() { int型私は、jは、 scanf関数(" %D%D "、&N、&M)。 int型U、Vを、 memset(0、はsizeof ())。 しばらく(〜のscanf(" %D%D "、&U&V)) [U] [V] [V] [U] = = 1 。 memset(B、 - 1、はsizeof (b)参照)。 } あなたが一致して(あなたと) { int型私は、jは、 用(i = M + 1 ; <I = N; I ++ ) { もし([U] [i]は&&!VIS [I]) { VIS [i]は = 真; もし(B [I] == - 1個の || 一致(B [I])) { B [i]は = U。 リターン 1 ; } } } リターン 0 ; } int型のmain() { 初期化(); int型 ANS = 0 ; 以下のために(INT iが= 1 ; I <= M; I ++ ) { memsetの(VIS、偽、はsizeof (VIS)); ANS + = マッチ(I)。 } printf(" %dの" 、ANS)。 リターン 0 ; }