[] NOIP2018pj対称バイナリツリー

フェイス質問

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

問題の解決策

書式#include <cstdioを> 
する#include <iostreamの>
 使用して 名前空間はstdを、

構造体ノードは{
   int型のVal、LSON、rsonと、
} [ 1050000 ]。
int型の SIZ [ 105万]。
int型のn; 

ボイド DFS(INT X){ 
  SIZ [X] = 1 もし(![X] .lson = - 1)DFS([X] .lson)、SIZ [X] + = SIZ [X] .lson]。
  もし(![X] .rson = - 1)DFS([X] .rson)、SIZ [X] + = SIZ [X] .rson]。
} 

BOOL缶(INT U、INTV){
   場合(U == - 1 &&のV == - 1を返す もし(! - U = 1つの && V =! - 1 ){
     場合([U] .val == A [V] .val &&缶([U] .lson、[V] .rson)&& 缶([U] .rson、[V] .lson))
       を返す それ以外の 返し はfalse ; 
  } 
  を返す 
} 

int型)(主{
   int型私は、
  scanf関数(" %のD "、&N)
  (i = 1 ; iが<= N; iは++)のscanf(" %のD "、および[I] .val)。
  (i = 1 ; iが<= N; iは++)のscanf(" %d個の%のD "、および[I] .lson、&[I] .rson)。
  DFS(1 )。
  int型 ANS = 0 ;
  (i = 1 ; iが<= N; iは++)場合(CAN([I] .lson、[I] .rson))ANS = MAX(ANS、SIZ [I])。
  printf(" %d個の\ n " 、ANS)。
}

 

おすすめ

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