タイトル効果は:n個の要素は、mは、関係A> Bとが与えられており、の要素は(N + 1)/ 2個の要素から求められることがあり、要素が出力に対応する位置に、出力0、およびその逆であってもよいです
省、過去二週間の最後の2つが、今、私はこのタイトルを記入し、このタイトルを感じることは難しいことではありませんが、その時は明らかに質問の意味を理解していなかった、彼の心を混合してもよいです。トピックによると、関連するトポロジカルソートでこれを見やすいですが、トポロジカルソートの役割は、判決を探していることも、主に考えて最初の(N + 1)/ 2素子であってもよい関係が矛盾して与えられたかどうかを決定することです。
(N + 1)/ 2の要素とすることができる中間要素は、その要素(それよりも大きい)の数と(それよりも小さい)その背後にある要素の数よりも大きくないとその前に明らかに不確かより(N-1)/ 2番目の要素、残りは、その要素がまたはそれ前後に任意のアップすることができ、よりも大きいか小さいからです。だから我々は、に対処するために、DFSを使用することができ、また、後者の要素の数は、それの前の任意のノードには明らかです。右上の任意のノードが、より小さな要素のビビの小さい要素は、その特定の操作ので、我々は、各要素xについて、それが各より小さいために推論することができるDFS、それよりも確実に小さい、そのしかし、yが更新された要素をマークしていなかった、それは要素x ++と++ yの前の要素の後ろにあり、最終的にxがyよりも大きいマーク。
詳細については、多くはない側面ので、私はスターに無用の前にベクトルを向け、コードを参照してください。
1の#include <cstdioを> 2の#include <ベクトル> 3の#include <キュー> 4 使って 名前空間STDを、 5 のconst int型 N = 118 。 6ベクター< INT > VV [N]。 7 BOOL大きい[N] [N]。// 大きな[I] [J]就标记私是否比jの大 8 INT デュ[N]、VIS [N]、あらかじめ[N]、バック[N]; 9 ボイドのinit(int型N) 10 { 11 のための(int型 I = 0 ; iが<= N; iが++ ) 12 { 13 デュ[I] = 0 ; 14 VIS [I] = 0 ; 15 プレ[i]はバック= [I] = 0 ; 16の VV [I] .clear(); 17 のために(INT J = 0 ; J <= N; J ++ ) 18 ビッグ[i]は[j]は= 偽。 19 } 20 } 21 BOOL TP(INT N) 22 { 23 キュー< INT > Q。 24 のために(INT I = 1; iが<= N; iは++ ) 25 であれば(DU [i]が<= 0 &&!VIS [I]) 26 { 27 VIS [I] = 1 。 28 q.push(I)。 29 } 30 int型の和= 0 、X、Y。 31 ながら(!q.empty()) 32 { 33 、X = q.front()。 34 q.pop()。 35 合計++ ; 36 のためには、(int型、I = 0 ; iが<[X] .size()VV; iが++ ) 37 { 38 のY =のVV [X] [I]; 39 デュ[Y] - 。 40 であれば(DU [Y] <= 0 &&!VIS [Y]) 41 { 42 VIS [Y] = 1 。 43 q.push(Y)。 44 } 45 } 46 } 47 リターン和== N。 48 } 49の 空隙 DFS(INT U、INT F) 50 { 51 のために(INTを= I 0、Iは<VV [U] .size(); I ++は) 52である { 53は int型 V = VV [U] [I]、 54は IF!(ビッグ[F] [V])// F> Vしかし標識されていない、それを更新することができる 55 { 56である [F] [V] =ビッグtrueに、 57は、 予め[V] ++; // フロント++ Vの要素数 58 ;戻る[F] ++ // 後F要素の数- 59 DFS(V、F); 60 } 61れる } 62である } 63は、 INT (メイン) 64 { 65 INTT、N、M、U、V。 66 のscanf(" %dの"、&T)。 67 一方(t-- ) 68 { 69 のscanf(" %D%dの"、&N、&M)。 70 INIT(N) 71 一方(M-- ) 72 { 73 のscanf(" %D%dの"、&U、およびV)。 74 デュ[V] ++ ; 75の VV [U] .push_back(V)。 76 } 77 であれば(!のTP(n))を// 関係のトポロジカルソートが競合賞にするかどうかを 78 { 79 のために(INT I = 1 ; I <= N; I ++は) 80 のputchar(' 0 ' ); 81 プット("" ); 82 } 83を 他の 84 { 85 用(INT I = 1 ; I <= N-Iが++ ) 86 DFS(I、I); 87 用(INT I = 1 ; I <= N; I ++は) 88 IF([I] <=(N-プレ1)/ 2バック&& [i]は<=(N- 1)/ 2 ) 89 のputchar(' 1 ' )。 90 他の 91 のputchar(' 0 ' ); 92の プット("" ); 93 } 94 } 95 リターン 0 。 96 }