[]ワンダフル国HNOI2008

フェイス質問

https://www.luogu.org/problem/P3196

問題の解決策

// luogu-判定部イネーブル-O2 
の#include <cstdioを> 
する#include <CStringの> 
する#include <iostreamの> 
する#include <ベクトル>
 の#define RIレジスタint型
 の#define N 10500
 使用して 名前空間STDを、

インラインint型リード(){
   int型 RET = 0、F = 0チャー CH = GETCHAR()。
  一方、(CH < ' 0 ' || CH> ' 9 ')は、f | =(CH == ' - ')、CH = GETCHAR()。
  同時に(CH> = ' 0 ' && CH <= ' 9 ')RET * = 10、RET + =(CH- ' 0 ')、CH = GETCHAR()。
  リターン F - ?RET:RET; 
} 

int型N、M、S [N]。
ベクター < INT > [N]に、V [N]。
BOOL 使用VIS [N]、[N]。
INT [N]。
int型COL [N]。

INT (){メイン
  N =読み取ります()。M = 読み取ります();
  (RI i = 1 ; iが<= M; iは++ ){
     int型 =)は(読み取り、B =読み取ります();
    [A] .push_back(B)に、[B] .push_backに(A)
  } 
  のための(RI i = 1 ; I <= N; iは++)V [ 0 ] .push_back(I)。
  INT X = N。
  VIS [N] = 1 int型 MAXS = 0 ;
  (RI i = 1 ; iが<= N; iが++ ){ 
    VIS [X] = 1 (RIをJ = 0 ; J <に[X] .size(); J ++ ){
       int型、Y = [X] [J]であり;
      もし(VIS [Y])続けます
      V [ ++ S [Y]一back(Y)。
      もし(S [Y]> MAXS)MAXS =のS [Y]。
    } 
    BOOL FL = 0 一方、(MAXS> = 0 ){
       (ロードアイランドJ = V [MAXS] .size() - 1 ; J> = 0 ; j-- ){
         場合(VIS [V [MAXS] [J])V [MAXS ] .pop_back()。
         {X = V [MAXS] [J]。FL = 1破る;} 
      } 
      場合 maxs--(FL!)。他に 休憩; 
    } 
  } 
  int型の CNT = 0 (RI i = 1 ; I <= N; iは++)CNT = MAX(CNT、S [I] +1 ); 
  printf(" %d個の\ n " 、CNT)。
}

 

おすすめ

転載: www.cnblogs.com/shxnb666/p/11279833.html