P2016戦略ゲーム
バーにツリーDPエントリ(今どのように青色のラベルを理解していません)。
それぞれの側の代わりに、各ポイントを見て注意(この間違った数回あるため)。
書式#include <cstdioを> する#include <CStringの> の#include <アルゴリズム> 使用して 名前空間はstdを、 const int型 MAXN = 3010 ; INT プレ[MAXN]、最後[MAXN]、他の[MAXN]、L。 ボイド追加(int型のx、int型のY) { L ++ 。 プレ[L] = 最後[X]。 最後[X] = L。 他の[L] = Y。 } INT N; INT F [MAXN] [ 2 ]。 無効 DFS(int型のx、int型FA) { [X] [F 1 ] = 1 ; fは[X] [ 0 ] = 0 。 用(INT P =最後[X]; P; P = 事前[P]) { int型 V = 他の[P]。 もし(== FA V)続けます。 DFS(V、X) F [X] [ 1 ] + =分(F [v] [ 0 ]、[V] F [ 1 ])。 F [X] [ 0 ] + = F [v] [ 1 ]。 } } int型のmain() { scanf関数(" %d個"、&N); 用(int型 i = 1 ; iが<= N iが++ ) { int型、X、K、Y。 scanf関数(" %dの%のD "、およびX&K)。 X ++ ; 用(INT J = 1 ; J <= K; J ++ ) { scanf関数(" %のD "、&Y)。 Y ++ ; (x、y)を加えます。 追加(Y、X)。 } } DFS(1、0 ); printf(" %dの"、分(F [ 1 ] [ 1 ]、F [ 1 ] [ 0 ])); リターン 0 ; }