パイロットと14 24ネットワーク・フローの問題]
★★入力ファイル:flyer.in
出力ファイル:flyer.out
の単純な比較
制限時間:1秒メモリ制限:128メガバイト
[問題の説明]
フライング旅団は、航空機の一つのモデルを駆動に特化した世界各地からのいくつかのドライバは、航空機が正ドライバーとコパイロットになり、航空機ごとに2人のパイロットを持っていました。このような相互の問題など様々な理由に、いくつかのドライバは、ドライバと、同一平面上に飛ぶ航空機の帆を最大限に活用する方法を尋ねたことができません。
示されるように、ことV1、V2で示すように、ドライバ10は、想定...、ドライバ10の代わりにV10を、前記V1、V2、V3、V4、V5は正のドライバである、V6、V7、V8、V9 、V10は、副操縦士です。パイロットと副操縦士であることは同じ飛行機を飛ばすことができれば、彼ら二人の間に偶数ラインに代わって、二人は同じ平面に、さえない飛ぶことができません。V1とV8ができないが、例えばV1及びV7は、同一平面上を飛ぶことができます。ほとんどの航空機の出航でパイロットをしてください。注:労働者の厳密な区分を駆動するため、2つの正または2つのパイロット副操縦士は、同じ飛行機を飛ばすことができません。
[入力形式]
いくつかの行が入力ファイル
、最初の行2つの整数nおよびN1、nはパイロット(2 <= N <= 100表しあり 、) n1は正のドライバであるパイロットは、
ここで、各行は、2つを有する、複数の行であります図のA、B。これは、同じ飛行機を飛ばすことができ、正のパイロットと副操縦士Bを表します。
、最初の行2つの整数nおよびN1、nはパイロット(2 <= N <= 100表しあり 、) n1は正のドライバであるパイロットは、
ここで、各行は、2つを有する、複数の行であります図のA、B。これは、同じ飛行機を飛ばすことができ、正のパイロットと副操縦士Bを表します。
注:ドライバの乗客数未満の正数でドライバ、すなわち、正の前面の数。
[出力形式]
出力ファイルは、ライン持つ
最初の行の、離陸航空機の最大数を表す整数。
最初の行の、離陸航空機の最大数を表す整数。
[O]サンプル
ファイル名を入力します。flyer.in
5 10
1 7
2 6
2 10
3 7
4 8
5 9
1 7
2 6
2 10
3 7
4 8
5 9
出力ファイル名:flyer.out
4
<ビット/ STDC ++ H>の#include の#define MAXN 105 使用して 名前空間STDを、 int型 N、N1、N2、ANS = 0 。 ベクター < INT > [MAXN] V。 int型VIS [MAXN]、ティムを、[MAXN]肝炎; BOOLのDFS(int型RT){ ため(int型 = Iを0 ; iはV <RT] .size(); iは++ ){ int型 =にV [RT] [I]。 もし(!VIS [に対する] = TIM){ VIS [に対する] = ティム。 もし(!肝炎[する] || DFSは()に】HAV){ [する]肝炎= 室温。 返す 真; } } } を返す 偽。 } int型のmain(){ // freopenは( "flyer.in"、 "R"、STDIN)。 // freopenは( "flyer.out"、 "W"、STDOUT)。 scanf関数(" %d個の%のD "、&N、&N1)。int型のn = n2はn1と; INT X、Y。 一方、(scanf関数(" %d個の%のD "!&X&Y)= EOF)V [X] .push_back(Y)。 以下のために(int型 i = 1 ; iは= N1とを<。 ++、+ = ANS のDFS(I)。 printf(" %dの" 、ANS)。 リターン 0 ; }