テトリスハングのランクは、電気的にトポロジカルソートは互いに素セットを追加しました

レレから開発評価システムは、彼のキャリアテトリスがさらに強力で、彼はすぐに世界中にゲームを置きます。

より良いものを愛好家の嗜好を満たすために、レレは、新しいアイデアをしたい:彼は自分の場所もフォーブス豊富なリストよりも音が、定期的に更新され、グローバルテトリスマスターリストになるだろう。どのように順位については、それはすべてのは言うまでもないが、評価行に応じて降順を知っている二人が同じ評価を持っている場合、これらの人々が行に降順RPを押してください。 

最後に、レレは、N、個々のランキングに行動を開始します。便宜のために、それぞれが数、より高いRPを0からN-1に、それぞれ、番号、及び大きなされています。 
同時にでパパラッチから評価に関するいくつかレレ(M A)情報を作りました。この情報は、三つの条件、すなわち、 "A> B"、 "A有していてもよい 、= B"、 "A <B"を、それぞれ評価AはBよりも大きい場合、Bは、に等しいB.未満 

レレあなたは彼がマスターリストを作るのを助けることはできません。今、彼はちょうど知りたいと思った、情報はこのマスターリストを決定することができるかどうかに応じて、それは「OK」が出力されます。そうしないと、不完全な情報(出力「UNCERTAIN」)、またはので、これらの競合に含まれる情報(出力「CONFLICT」)の終わりには、エラーの原因を特定します。 
メッセージは、競合と不完全な情報の両方を含む場合、それは「競合」を出力することに留意されたいです。 

入力は、このタイトルは、ファイルの末尾に対処するために、テストの複数のセットを持っています。 
各テストの最初の行は、2つの整数N、M(0 <= Nを含有する <= 10000,0 <= M <= 20000)、 各々が得られる関係の数を表し、ランク。 
そして、M行があり、それぞれがこれらの関係を表す 
請求サンプル入力出力のトピックでライン上の各テストのための出力を、

3 3 
0> 1 
1 <2 
0> 2 
4 4 
1 = 2 
1> 3 
> 0 2 
0> 1 
3 3 
1> 0 
1> 2 
2 <1

サンプル出力

OK 
CONFLICT 
UNCERTAIN 
アイデア:最初のと同じ要素に互いに素なセットは、処理エレメント、及びその後トポロジーの各要素の順序にルートノードとして、仕分けプロセスの数は、キュー要素が等しくない場合は、一緒に接続されています、不十分な状態を示す、そうでない場合は成功した撮影、競合を示します
書式#include <iostreamの> 
の#include <cstdioを> 
する#include <ベクトル> 
の#include <CStringの> 
の#include <キュー>
 使用して 名前空間はstdを、
CONSTの INT N = 1E5 + 7 

INT ARR1 [N]。
INT ARR2 [N]。
チャーARR3 [N]。
INT プレ[N]。
ベクター < INT > VEの[N]。
INT  における[N]。


INT見つける(INT X){
     場合([x]は、予めX ==)リターンXと、
    リターン事前[X] = (予備[X])を見つけます。
} 


INTのmain(){
     int型、N M。
    一方、(CIN >> N >> M){ 
        memsetの(0はsizeof))。
        以下のためにint型 i = 0 ; iがNを<; iは++ ){ 
            プレ[I] = I。
            VEの[I] .clear(); 
        } 
        キュー < int型 > QUE。
        memset(ARR1、0はsizeof (ARR1))。
        memset(ARR2、0はsizeof (ARR2))。
        int型、N1 =のn;
        以下のためにint型 I = 1 ; I <= M; iは++ ){ 
            scanf関数(" %dの%Cは%のD "、&​​ARR1 [i]は、&​​ARR3 [I]、およびARR2 [I])。
            もし(ARR3 [I] == ' = ' ){
                 int型の FX = 見つける(ARR1 [I])。
                INT FY = (ARR2 [I])を見つけます。                
                もし(!FX = FY){ 
                    事前[FX] = FY。
                    N1 - ; 
                } 
            } 
        }
            
        
        以下のために {int型 I = 1 ; I <= M; iが++ ){
             場合(ARR3 [i]が== ' = '続けます
            
            int型の FX = (ARR1は、[I])を見つけます。
            INT FY = (ARR2 [I])を見つけます。
            
//             もし(FX ==年度){
 //                 プット( "競合")。
//は                続けます。
//             } 
             もし(ARR3 [I] == ' > ' ){ 
                VEの[FX] .push_back(FY)。
                 [年度] ++ ; 
            } 
            
            
                VEの[FY] .push_back(FX)。
                 [FX] ++ ; 
            } 
        } 
        
        のためにint型 i = 0 ; iがN <、iは++ ){
             場合、[I] == 0 &&(I)を見つける== I){ 
                que.push(I)。
            } 
        } 
        int型の和= 0 BOOL不確か= ;
        一方、(que.size()){
             場合(que.size()> 1)=不明int型XX = que.front()。
            que.pop(); 
            合計 ++ ;
            以下のためにint型 i = 0 ; iは、VEの<[XX] .size(); iは++ ){
                  [Veを[XX] [I]] - 場合 [XX] VEの[i]は] == 0 ){ 
                    que.pushは([I] [XX] VE)。
                } 
            } 
        } 
        もし(!合計= N1)プット(" CONFLICT " )。
        それ以外の 場合(不確か)プット(" UNCERTAIN " );
        他のプット(" OK " ); 
    } 
    戻り 0 
}

 




おすすめ

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