饗宴bzoj1823 luogu4171

1823:[JSOI2010]饗宴

制限時間:10秒   メモリ制限:64メガバイトの
提出:3392   解決:1704
[ 送信 ] [ ステータス ] [ 議論 ]

説明

饗宴は、最も豪華な中国の宴会料理で、料理の無数に提示調理法や満州漢による材料の多くの異なる種類があります。大規模かつ複雑な皿に、知識豊富な有能なシェフのほんの一握りの饗宴を作り、そして調理することができることができ、それは中国最大のシェフの饗宴の我々の専門家の名誉のいくつかの一つです。世界協会は、専門家で構成さごちそう料理のシェフをごちそうすることができますが、その中でも、料理人の異なるレベルの数に分解されます。シェフの饗宴協会の世界に新規参入者を募集するためにすぐにごちそうコンテストを開催します、協会は、参加シェフの間になることです、新星満州食品業界を発見し、評価者として多くのメンバーを送りました。次のように総会の規則がある:各参加選手は、材料のn個の種類を取得することができ、プレイヤーは料理として、完全な中国料理の種類や材料を自由に選択できます。総会のレビューシステムは、以下のとおりですmビットの査定の合計がチェックしました。饗宴のためのすべてのレビューアが独自のユニークな洞察力を持っていますが、基本的なビューは、フラグの饗宴としての皿は異なるがなければならないということです。フルスタイルの子羊鍋とは中国風の豚肉が存在しない場合は、ごちそうを捉えることができないことを確認する場合。しかし、それは審査中である場合を除き、あまりにも強い志向の見直し、総会の規定を避けるためには、2枚の皿がプレイヤーを排除するために、状況の外に行われていない、または競技者を排除することはできませんする必要があります考えています。言い換えれば、限り、参加者は、これら2つの物質、評価の好みに合わせて1で練習できるよう見直しにより確認することができます。4フルタイプ、スタイルは牛肉、豚肉、牛肉漢漢中国風の豚肉、牛肉と羊肉のフルスタイル中国風豚肉が満たされた2件の評価レビュー3つの全面的な見直しの検討:豚肉、羊肉や牛肉などの材料は、次の表の4つの査定などがある場合にはスタイル子羊参加者は完全なスタイルの豚肉、羊肉や牛肉料理のフル完全なスタイルを作るように、彼は、認定IIIの要件を満たすことができません評価を渡すことはできません。出場者Bは、すべてのレビューの要件を満たすために、中国風の豚肉、羊肉や牛肉料理のフル完全なスタイルを作るために。しかし、その後、私たちは特別な構成で選択された審査員によって送られた材料が良好であれば誰もが検査を通じて発生しないことができるように、総会は、このようなシステムの下で、すべての参加者のみが、校閲すべてではないことで一部を調べることができることを発見しました状況。とき4人の評価者の好み、次の表の場合は、関係なく、すべての評価の審査合格することができない競合他社の慣行の種類、の2つの評価の見直しの検討3件の完全なレビュー4フルタイプのスタイルの羊肉の中国風中国風の豚肉を中国風の豚肉、羊肉と豚肉のフルマトンフルタイプのスタイル中国風の豚肉

入力

最初の行は、K、Kは、テストファイルはデータのセットが含ま表す番号を含みます。テストデータの各セットの最初の行には、mはパネリストビット、N個のM(n≤100、m≤1000)、nは材料の代表2つの数字を含んでいます。便宜上、材料廃棄中国名は1からnまでの番号の数を、与えられました。次のm行は、各行は、対応するレビューアは、2人の好みを持って表し、数字が続く文字の各嗜好を表し、このような完全な料理を介してそれを行うための最初のもののような、この口コミ材料の代わりにM1として料理、中国料理の皿の外に作られた材料を通る最初の二つのような審査のH2の代理としてしばらく。各テストファイルは、テストデータの50の以上のセットを持っていません。

出力

そうでない場合は、出力BAD(大文字);誰もジレンマ、出力GOODを評価することはできない場合は、各テストデータ出力ラインのうち、それは起こりません。

サンプル入力

2
3 4
M3 「のH1
m1があるM2
H1 H3
H3 M2
2~4
H1 M2
M2とM1である
H1 H2
m1はさH2

サンプル出力

GOOD
BAD

学ぶ2-SATのテンプレートのテーマ

2-SATの問題:コレクションの各要素は、何らかの形与えるよう2つの値た Aが取る 0/1、次いで Bがフェッチされなければならない B 0/1溶液があるかどうかを尋ねる、制約

問題を参照してください、最初の反応は、ドメイン互いに素-セットを拡張することです

しかし但し書きについて考え、場合:あれば取る0B取っB 0を、そして組み合わせ0B 0、事実上追加この時間ならばBがかかるB 0を、そしてAは、かかる0制約を

それでは、どのようにそれを解決するには?

非拡張フィールドの互いに素セット側の有向辺に、強連結成分は、求めることができます!

 

審査員の好みがある場合は、この問題では、MX HY、その人がした場合はHXを、そして彼がしなければならないHYを行っている場合、私は、あなたがしなければならないMXを

その後れる2-SATはテンプレートです

 

 

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
CONSTの INT N = 105、M = 1005 INTのN、M。
int型のヘッド[N << 1 ]、[M <<版1 ]、NXT [M << 1 ]、CE。
INT CO、[N << DFN 1 ]、ロー[N << 1 ]、ST [N << 1 ]、トップ、イン[N << 1 ]、C [N << 1 ]、CNT。
チャー CH [ 10 ]。
ボイド tarjan(int型今)
{ 
    [今] DFN =低[今] = ++ CO、[今]イン= 1、ST [++トップ] =今;
    以下のためにint型 I =ヘッド[今]を、I; I = NXT [I])
    { 
        int型、Y = [I]版。
        もし(!DFN [Y])
        { 
            tarjan(Y)。
            低[今] = 分(低[今]、低[Y])。
        } 
        そう であれば(INS [Y])低[今] = 分(低[今]、DFN [Y])。
    } 
    もし(DFN [今] == 低[今])
    {
         ++ CNT。int型、Y = - 1 一方、(Y =!今)
            Y = [トップ- ] ST、C [Y] = CNT、イン[Y] = 0 ; 
    }
} 
ボイドのinit(INTX)
{ 
    scanf関数(" %sの"、CH + 1 )。
    INT = F 0、RES = 0 もし(CH [ 1 ] == ' H ')は、f = N。
    以下のためにint型 I = 2 ; iは=のSTRLEN(CH + < 1); ++ I)のRES =のRES * 10 + CH [I] - ' 0 ' 
    X = RES + F。
} 
int型 F(INT X){ リターンX> N XN:X + N;}
 ボイド ADDE(int型int型B)を
{ 
    版[ ++ CE] = B、NXT [CE] =ヘッド[A]、ヘッド[A] = CE。
} 
int型のmain()
{ 
    int型のT。
    scanf関数(" %のD "、&T)。
    一方、(T-- 
    { 
        ブールフラグ= 0 
        scanf関数(" %d個の%のD "、&​​N、&M)。
        CE =共同= CNT = 0 ; 
        memsetの(頭、0はsizeof(頭));
        以下のためにint型 I = 1 ; I <= M; ++ I)
        { 
            int型NUM1、NUM2。
            INIT(NUM1)。INIT(NUM2)。
            ADDE(F(NUM1)、NUM2)。ADDE(F(NUM2)、NUM1)。
        } 
        / * のための(I = 1をint型、iが1 <= N <<; ++ i)が
        { 
            COUT << I << ":"。
            (INT J =頭部[I]; J; J = NXT [J])のための
                COUT <<版[J] <<」「。
            coutの<<てendl; 
        } * / 
        memsetの(DFN、0はsizeof (DFN))。
        以下のためにint型 I = 1 iは= N <<。; ++ i)が
         あれば(!DFN [i])とtarjan(I);
        // (I = 1をint型; iが、1 <= N <<; ++ i)について
         //     COUT << I <<」「<< C [I] << ENDL。
        以下のためにint型 i = 1 ; iは= N <; ++ I)
             もし(C [I] == C [iが+ N])
            { 
                プット(" BAD " )。
                フラグ = 1破ります; 
            } 
        もしプット((フラグ!)" GOOD " ); 
    } 
    戻り 0 
}

 

 

 

 

おすすめ

転載: www.cnblogs.com/w19567/p/11239566.html
おすすめ