P2016戦略ゲーム - ツリーDPの洪水の問題

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(10 );
    printf(" %dの"、分(F [ 1 ] [ 1 ]、F [ 1 ] [ 0 ]));
    リターン 0 ; 
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/WHFF521/p/11756615.html