ハング電気2094チャンピオン生成

2人の間にゲームをプレイするために、Sishaにそれぞれをキャッチアップするための2つの間の卓球の試合をプレイする人々のグループ、。 
:ゲームのルールは以下のとおりである 
ビートB場合は、BとCを破ったが、その後見つけ、AとCの間には競争が行われていない、AはCを打つことができなければなりません 
ビートB、B場合とC、及び、Cを破り、Aを倒し、その後、A、B、Cの3つはチャンピオンになることはできません。 
このルール、ノーコンテストサイクルによると、チャンピオンを決定することができます。あなたの仕事は、実際にチャンピオンを生成するかどうかを判断するために、いくつかのフィールドのモトリー・クルーの後、ゲームプレイヤーのグループに直面することです。 

入力入力グループは、n個のゲームのプレイヤーの結果に続いて、いくつかの選手、整数n(nは<1000)と各選手のグループの開始を、含まれている、(スペース間隔で)名前のゲーム結果に選手のペアは、前者が後者を克服しました。nが0である場合、それは、入力の終了を示します。 
選手たちのグループごとに出力、あなたはそれがチャンピオン、出力「はい」行で、行内のそれ以外の場合は出力「いいえ」を生み出す判断した場合。 
サンプル入力

3 
アリスボブ
・スミスジョン・
アリス・スミス
5 
交流
のCD 
ドは
なる
広告
0

サンプル出力

はい
ません
この問題は発生したタイトルは、限り、最初のポイントは、トポロジカルソートのように排出することができるように、それは限り、第一度ポイントが0であると言うことであるかどうかを決定し、それだけが必要です。かどうかは、行の残りのポイントは必要ないかもしれません。(AHピット!!)
方法1(列番号の代わりに使用することを学びました)
#include <iostreamの> 
する#include <cstdioを> 
する#include <地図> 
の#include <ベクトル> 
の#include <CStringの>
 使用して 名前空間STDを、
マップ < 文字列int型 > 融点; 
ベクター < INT > VEの[ 100000 ]。
int型 では [ 100000 ]。
INT のmain(){
     int型のn;
    一方、(CIN >> N && N){
         int型の POS = 0 文字列、B;
        int型のA1、B1;0はsizeof))。
        mp.clear(); 
        以下のためにint型 i = 1 ; iが++; iが<= N ){ 
            CIN >> A >> B。
            もし(mp.find(A)== mp.end()){ 
                MP [A] = POS。
                A1 = POS; 
                POS ++ ; 
            } 
            { 
                A1 = MP [A]。
            } 
            であれば(mp.find(B)== mp.end()){ 
                MP [B] = POS。
                B1 = POS; 
                POS ++ ; 
            } 
            { 
                B1 = MP [B]。
            } 
            [A1] .push_back(B1)まし。
             [B1] ++ ; 
        } 
        INT ANS = 0 以下のためにint型私= 0 ; iがPOSを<; Iは++ ){
             場合、[I] == 0 ){ 
                ANS ++ 
            }
        } 
        場合(ANS == 1 ){ 
            プット(" はい" ); 
        } 
        { 
            プット(" なし" ); 
        } 
    } 
    
    戻り 0 ; 
}

必要であれば、残りの要素は、また、行にトポロジカルソートを行ってもよいです

方法2(ダイレクトマップ)タイトルの意味に従っては、勝者はそれぞれのゲームに勝つだけです必要があります

書式#include <iostreamの> 
の#include <cstdioを> 
する#include <地図>
 使用して 、名前空間STD; 
地図 < 文字列int型 > MP1、MP2; // MP1勝者を記録し、MP2故障記録するために使用する
地図を < 文字列int型 > ITをイテレータ::;
 int型のmain(){
     int型N-、
     一方(N-CIN >> && N-){ 
        mp1.clear(); 
        mp2.clear(); 
        文字列S1、S2;
         のためINT I = 1 ; I <= N- ; I ++ ){ 
            CIN >> S1S2; 
            MP1 [S1] ++ ; 
            MP2 [S2] ++ ; 
        } 
        INT ANS = 0 以下のためには、(それがmp1.beginを()=;!それ= mp1.endを();それ++ ){
             場合(MP2 [IT->第] == 0 ){ 
                ANS ++ 
            } 
        } 
        もし(ANS == 1 ){ 
            プット(" はい" ); 
        } 
        { 
            プット(なし)。
        } 
    }
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/Accepting/p/11317114.html