ポータル
問題解決のためのアイデア
彼の座席クラスBとして人としてクラス、次いで、2部グラフマッチング、なおから一次元に配列のすべて[] [2]、各列は、2つの座席を有するからです。
それぞれの側のために取得することができる二つに分離または分解されています。
ACコード
1の#include <iostreamの> 2の#include <CStringの> 3 使用して 名前空間をSTD。 4 INT N、ANS、VIS [ 2005 ] [ 2 ]、[OK] [ 2005 ] [ 2 ]。 5 int型の M [ 4005 ] [ 2 ]。 6 ブールチェック(INT U){ 7 用(INT iは= 0 ; I <= 1 ; I ++ ){ 8 int型 V = M [U] [I]。 9 用(int型 J = 0; J <= 1 ; J ++ ){ 10 であれば(VIS [V] [J])続けます。 11 VIS [V] [j]は= 1 。 12 であれば(OK [V] [J] ||!確認(OK [V] [J])){ 13 [OK]を[V] [J] = U。 14は 返す 真。 15 } 16 } 17 } 18 リターン 偽。 19 } 20 int型のmain(){ 21 CIN >> N。 22 のための(int型 I =1 ; I <= 2 * N; I ++ ){ 23 CIN >> M [i]が[ 0 ] >> M [i]を[ 1 ]。 24 } 25 のために(INT iは= 1 ; iが<= 2 * N; I ++ ){ 26 のmemsetは(VIS、0、はsizeof (VIS))。 27 もし ++ ANS(チェック(I)); 28 } 29 COUT << ANS。 30 リターン 0 ; 31 }