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