ツリーDP - HDU2196

トピックリンク

タイトルの意味

コンピュータ最も遠い各コンピュータの長さを調べます

トピック分析

ノードvについて、そのサブツリー内の最長場合、我々は、DPを取る[U] [0]

そうでない場合は、最大長さは、その親ノードUを通過する、vが最大最長の長さ= DIS(U、V)+のUであります

最初の場合、最長経過U、Vの子ノードは、明らかに望ましくない最長の長さの長さは、その後、私たちは第二の長いDPの長さに行くかどう[U] [1]

Uなしの最長の長さは、子ノードをV場合には、第2ケースは、その後、uはDP最長の長さを取る[U] [0]

したがって、各ノードは、サブツリー最長の距離DPを必要とする[U] [0]、第長距離DP [U] [1]

計算の便宜のためだけでなく、親ノードの後最長の距離DPを必要[U] [2]

このプロセスでは、より詳細な表情ブロガーもブログを

トピックコード

書式#include <stdio.hに> 
する#include <iostreamの> 
書式#include < 文字列の.h>
 使用して 名前空間はstdを、
const  int型 MAXN = 1E4 + 7 int型、N、Q、A、B、C、TOT。
int型のヘッド[MAXN]、DP [MAXN] [ 3 ]、最長[MAXN]。
構造体ノード{
     int型、次に、Wに対して、
}エッジ[MAXN * 2 ]。
ボイド追加(INT U、INT V、INT W){ 
    エッジ[TOT] .TO = V。
    エッジ【TOT] .W =  W。
    縁【TOT] .next= ヘッド[U]。
    ヘッド[U]は ++ TOTを= 
} 
INT DFS1(INT U、INT FA){
     場合(DP [U] [ 0 ]> = 0戻り DP [U] [ 0 ]。
    DP [U] [ 0 ] DP [U]を= [ 1 ] DP [U]を= [ 2 ]最長= [U] = 0 ;
    以下のためにint型 - ;!I = I =ヘッド[U] 1 ; I = {エッジ[I] .next)
         のint V = エッジ[I] .TO。
        もし(== FA V)続けますもし(DP [U] [ 0 ] <DFS1(V、U)を+ エッジ[I] .W){ 
            DP [U] [ 1 ] DP [U] [= 0 ]。
            DP [U] [ 0 ] = DFS1(V、U)+ エッジ[I] .W。
            最長[U] = V。
        } 
        そう であれば(DP [U] [ 1 ] <DFS1(V、U)+ エッジ[I] .W){ 
            DP [U] [ 1 ] = DFS1(V、U)+ エッジ[I] .W。
        } 
    } 
    戻り DP [U] [ 0 ]。
} 
ボイド DFS2(int型 U、int型のFA){
     ためINTI =ヘッド[U]; I =! - 1 ; I = エッジ[I] .next){
         int型 V = エッジ[I] .TO。
        もし(== FA V)続けますもし(V ==最長[U])DP [V] [ 2 ] = MAX(DP [U] [ 1 ]、DP [U] [ 2 ])+ エッジ[I] .W。
         DP [V] [ 2 ] = MAX(DP [U] [ 0 ]、DP [U] [ 2 ])+ エッジ[I] .W。
        DFS2(V、U); 
    } 
} 
int型のmain(){
     ながら(〜のscanf(" %d個"、&N)){ 
        TOT =0 ; 
        memsetの(頭、 - 1はsizeof (ヘッド))。
        memsetの(DP、 - 1はsizeof (DP))。
        memsetの(最長、 - 1はsizeof (最長))。
        以下のためにint型私= 2 ; iが<= N; iが++ ){ 
            scanf関数(" %D%D "、&​​、&B)。
            (私は、b)の追加/ * 追加、(I、a、b)は* / ; 
        } 
        DFS1(10 );
        DFS2(10 );
        以下のためにint型私= 1 ; iが<= N; iが++ 
            のprintf(" %d個の\ n "、MAX(DP [I] [ 0 ]、DP [I] [ 2 ]))。
    } 
    戻り 0 
}

 

おすすめ

転載: www.cnblogs.com/helman/p/11273176.html