hdoj 1829 Aのバグの人生互いに素-セットタイプ

トピックリンク:http://acm.hdu.edu.cn/showproblem.php?pid=1829

そして、アプリケーションのチェックのセットは、交差点で2つの互いに素のセットであってはならない矛盾があるかどうかを検出することです。aとbが同じ性別エラーが決定されていること、が登場している場合、この問題は、A 2匹の昆虫の性別、各操作m回、所定の各時間(B)であり、二つ存在することセックスの間違い。私の戦略は、2つのセットの間の関係を維持するために、互いに素セットで、また二組です。私の以前のブログ、このアプローチの正しさの証明の具体的な証拠を見てください。

コードは以下の通りであります:

1の#include <ビット/ STDC ++ H>
 2のtypedefの符号なし整数UI。
3 typedefの長い 長いLL。
4符号なしのtypedef 長い ULL。
5  の#define PFのprintf
 6  の#define MEM(A、B)のmemset(A、B、はsizeof())
 7  の#define prime1 1E9 + 7
 8  の#define prime2 1E9 + 9
 9  の#define PI 3.14159265
 10  の#define LSON Lを、 MID、RT << 1
 11  の#define rson中間+ 1、R、RT << 1 | 1
 12  の#define scand(X)のscanf( "%のLLF"、&x)は 
13  の#define F(I、B)のための(INT iは=; I <= B; I ++)
 14  の#defineスキャン()のscanf( "%d個"、&)
 15  の#define MP(a、b)はmake_pair(()、(B))
 16  の#define P対<整数、整数>
 17  の#define DBG(引数)COUT <<#引数<< ":" <<引数<< ENDL。
18  の#define INF 0x3f3f3f3f
 19  CONST  INT MAXN = 2E6 + 10 20  整数N、M、T。
21インラインintはREAD(){
 22件     のint ANS = 0、W = 1 23      CHAR CH = GETCHAR()。
24      一方(isdigit(CH)!){ 場合(CH == ' - ')W = - 1 ; CH = GETCHAR();}
 25      ながら(isdigit(CH))ANS =(ANS << 3)+(ANS << 1)+ CH- ' 0 '、CH = GETCHAR()。
26の     リターン ANSは* wは、
27  }
 28  のint F [MAXN]、順位[MAXN]。
29  ブールフラグ。
30  ボイドのinit()
 31  {
 32      F(I、12 * N)F [I] = I、ランク[I] = 0;
33      フラグ= 34  }
 35  int型の検索(int型X)
 36  {
 37      であれば(X == F [X])リターンX。
38      リターン F [X] = (F [X])を見つけます。
39  }
 40  空隙連合(int型のx、int型のY)
 41  {
 42      INT FX = (X)を見つけます。
43      INT FY = (y)を見つけます。
44      であれば(FX ==年度)のリターン;
45      もし(ランク[FX] <ランク[FY])F [FX] = FY。
46      他の
47      {
 48          F [FY] = FX。
49          であれば(ランク[FX] ==ランク[FY])ランク[FX] ++ ;
50      }
 51  }
 52  BOOL同じ(int型のx、int型のY)
 53  {
 54      リターン検索(X)== (y)を見つけます。
55  }
 56  のint main()の
 57  {
 58      // freopenは( "INPUT.TXT"、 "R"、標準入力)。
59は     // freopenは( "output.txtと"、 "W"、STDOUT); 
60     std ::イオス:: sync_with_stdio();
61      T = ()を読み込みます。
62      INT CNT = 0 63      F(TT、1 、T)
 64      {
 65          N =(読み取り)、M = read()は、
66          のinit();
67          int型A、B;
68          F(I、1 、m)の
 69          {
 70              =(読み取り)、B = (読み取り)
71              であれば(同(B)||(同+ N、B + N))フラグ= 1 72              他の
73              {
 74                 連合(A、B + N-);
 75                  組合(+ N-A、B); // (A、B)のうちの異なるセットに
76              }
 77          }
 78          PF(" シナリオ#1%のD:\ N- " 、 TTは);
 79は、         IF(のフラグ)PF(" 不審なバグが見つかりました。\ N-!" );
 80          他の PFを(" いいえバグは不審な\ N-見つからない!" );
 81          PF(" \ N- " );
 82      }
 83   }

 

 

おすすめ

転載: www.cnblogs.com/randy-lo/p/12565411.html