フェイス質問
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)。 }