タイトルの意味
二つのそれぞれの機械、N、Mモード、各作業機は、少なくともいくつかの変換モードを尋ねるために、パターンのいずれかに到達するために必要
トピック分析
N二つのマシン、Mモードの二組の二部グラフとして、代表者との間の各作業ライン
タイトルは、(点取るまたはBはであることができる)点の全ての側面をカバーするために必要最小限に抑えることができます
その後定理は、求める最大に一致するように変換することができます
作業は機械モデルは0:00必要とするとき、仕事が変更モードなしで完了することができることに注意してください、あなたが考えることができません
トピックコード
書式#include <stdio.hに> する#include <iostreamの> 書式#include < 文字列の.h> 使用して 名前空間はstdを、 const int型 MAXN = 3E4 + 7 。 構造体の縁{ INT 次へ。 } E [ 1007 ]。 int型のヘッド[ 107 ]、TOT; ボイド追加(INT U、INT V){ E [TOT] .TO = V。 E [TOT] .next = 頭部[U]。 ヘッド[U]は ++ TOTを= 。 } BOOL VIS [ 107 ]。 INT bmach [ 107 ]、N、M、K、I、X、Y。 無効INITを(){ TOT = 0 。 memsetの(頭、 - 1、はsizeof (ヘッド))。 memset(bmach、0、はsizeof (bmach))。 } BOOL(見つけるint型{U)を するための(int型!; I = - I =ヘッド[U] 1 ; I = E [I] .next){ int型、V = E [I] .TO。 もし(VIS [V])続けます。 VIS [V] = 真; もし(bmach [V] ||!{(見つけるbmach [V])) bmach [V] = U。返す 真; } } を返す 偽。 } int型のmain(){ 一方(scanf関数(" %のD "、&N)){ 場合(N == 0)戻り 0 ; scanf関数(" %dの%のD "、&M、およびK); その中に(); int型のmx = 0 ; 以下のために(int型 i = 1 ; iは= Kを<; iは++ ){ scanf関数(" %D%D%D "、&I、およびX&Y)。 もし(MX <X)MX = X。 もし(Xの== 0 || Yの== 0)続けます。 (x、y)を加えます。 } int型の和= 0 。 以下のために(int型 I = 1 ; I <= MX; iは++ ){ memsetの(VIS、偽、はsizeof (VIS))。 もし合計++((i)を見つけます。) 。 } のprintf(" %d個の\ n " 、合計)。 } }