その他の質問Atcoder

その他の質問Atcoder


AGC014D

効果:彼らは白のドットに囲まれて、最終的な白い斑点がある場合は、白盛は結果を求めて、黒と白の木の染色(白上側の手)にターンを取ります

ソリューション:

  • Baibi盛ポイントときに、2枚の以上の隣接する葉
  • 一つだけの葉、それに隣接し、これが削除された離れた場合(白色点は、境界線の役割の葉に相当します)
1の#include <ビット/ STDC ++ H>
 2  の#define(私は++; iが=(B)<I =(A)がINTレジスタ)のための(I、B)FOR
 3  の#define(I、B用の)のための(レジスタINT I =(A); I> =(B); i--)
 4  の#define MEM(i、j)はmemsetの(I、J、はsizeof(I))
 5  の#define GO(U)のために(登録INT J = F [U]; J = - 1;!J = NXT [J])
 6  の#define Fiの第
 7  の#define SE第
 8  の#define PII対<整数、整数>
 9  の#define MPはmake_pair
 10を 使用して 名前空間はstd;
11 typedefの長い 長いLL。
12 CONSTの INT N = 1E5 + 5 13  int型N、A、B、LF [N]、D [N]、RT。
14  INT TOT = 0、[N] F、NXT [N << 1 ]。
15  構造体E
 16  {
 17      のint U、V。
18 } E [N << 1 ]。
19インラインボイド追加(INT U、INT V)
 20  {
 21      TOT ++ 22      NXT [TOTは] = F [U]を。
23      F [U]は= TOTを、
24      E [TOT =(E){U、V}。
25      リターン;
26  }
 27インラインint型リード()
 28  {
 29      INT X = 0、F = 1 30      チャー C = GETCHAR()。
31      一方、(C < ' 0 ' || C> ' 9 '){ もし、(C == ' - ')、F = - 1 ; C = GETCHAR();}
 32      ながら(C> = ' 0 ' && C <= ' 9 '){X =(X << 1)+(X << 3)+ C- ' 0 ' ; C = GETCHAR();}
 33      リターンのF *のX。
34  }
 35インラインボイド書き込み(INT X)
 36  {
 37      であれば(X < 0)のputchar(' - ')、X = - X。
38      であれば(X> 9)書き込み(X / 10 )。
39      のputchar(Xの%10 + ' 0 ' )。
40      リターン;
41  }
 42インラインボイドはい(){のprintf(" 最初の\ n ");出口(0 );}
 43インラインボイド無し(){のprintf(" 第二の\ n ");出口(0 );}
 44インラインINT DFS (INT U、INT FA)
 45  {
 46      のint = CNT 0 47      GO(U)
 48      {
 49          のint V = E [J] .V。
50          場合(== FA V)継続;
51          CNT + = DFS(V、U)。
52      }
 53      であれば(CNT> 1 )はい();
54      リターン CNT ^ 1 55  }
 56  のint main()の
 57  {
 58      MEM(F、 - 1 )。
59      N = )(読み取ります。
60      であれば(N == 2 )いいえ();
61      であれば(N == 1 )はい();
62      FOR(I、1、N- 1)A =読み取る()、B =(読み取り)、追加(a、b)は、(B、A)、D [A] ++を追加し、D [B] ++ ;
63      (I、FOR 1、N)LF [I] =(D [I] == 1 )。
64      (I、FOR 1、N)であれば {RT = I(LF [I]!)。ブレーク;}
 65      場合(DFS(RT、0 ))はい();
66      なし();
67      リターン 0 ;
68 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/C-S-X/p/11714606.html