タイトル説明
暁明数学の完全な関心、そして勤勉学生では、常に先生にいくつか質問をするクラスの後、教室に滞在します。彼は朝に乗っに学校に行ってきました。ある日、老人を参照するには、道路が突然花を剪定についての質問を考え、剪定植物や花です。放課後の日ので、暁明は、教師との問題を提起します:
奇妙な花は、上記偶数の合計有するNN N花、合計N-1N-1 N - 一緒に花に1つのTiao分岐、および剪定しない場合、すべての花は単離されません。それぞれの花は、花の数がより美しい「美しい指数」、大きなを持っていますが、また「美しいインデックスは、」すべての嫌な見て花を示す、負です。花は2、1つのスローになったので、それらの枝を取り除く:どの手段、「剪定」、いわゆる。「剪定」の一連の後、(おそらく)最後の花を残しました。教師の仕事はしている:「剪定」の一連の(「トリミング」することができるものが行われていない)ので、親族(花)の残りの花「ビューティフル指数」と最大の合計のすべての花。
一瞬思った先生は、正のソリューションを提供します。暁明は、彼があなたを求めるために使用されるので、問題は簡単に、非常に不幸、壊れている参照してください。
入力形式
整数の最初のラインN(1≤N≤16000)N(1≤N≤16000)N (1 ≤ N ≤ 1 。6 0 0 0 )。これは、上で成長しているオリジナルの花の合計を表すNN Nの花を。
二行目は持っているNN Nの整数を、最初II Iの整数を表し、IIはI美しい花インデックス。
次に、N-1N 1N。- 。1本のライン毎二つの整数A、BA、B、A 、B、接続の存在を示すAAのA花及びBB 花Bの枝を。
出力フォーマット
「ビューティフルインデックス」の合計を取得することができ、「剪定」の一連の後に最大値を表す数値。絶対値以上である21474836472147483647 2 。1 。4 。7 。4 。8 。3 。6 。4 7
サンプル入力と出力
7 -1 -1 -1 1 1 1 0 1 4 2 5 3 6 4 7 5 7 6 7
図3は、
バックパックを始め多くのパケットがさえ...反応しなかったん
[i]はN = 1E5既知のDPアレイは唯一、一次元、DPすることができ参照私をルート美しいサブツリーの最大値です。伝達方程式:DP [I] = MAX( DP [I]、DP [i]が+ DP [J])(J I息子)、注意しません。この問題のために行くことを繰り返して、DFSルートを行うことができるようにちょうど見つけ、明確なルートが存在しません。
オープン配列は、預金裏側のサイズを倍に開いている必要があります!!!!
#include <ビット/ STDC ++ H.> の#define N 32005 使用して 名前空間STD; int型 N-、P、ヘッド[N]、版[N]、次に[N]、TOT = 0 ; int型 DP [N] = { - 0x3f3f3f3f }、[N]; // ツリールートと最大でDP [i]は、I INT ANS = - 0x3f3f3f3f ; ボイド追加(int型 X、INT Y) { 版[ ++ TOT = Y、次に[TOT ] =頭部[X]、ヘッド[X] = TOT; } ボイド DFS(int型 X、INT PRE) { // 初期 DP [X] = A [X]。 int型I、J、K。 ため(I [x]はヘッド=; I;私は= 次に[I]) { int型、Y = 版[I]を、 もし(Y == PRE)続けます。 DFS(Y、X)。 DP [X] = MAX(DP [X]、DP [X] + DP [Y])。 } ANS = MAX(ANS、DP [X])。 } int型のmain() { CIN >> N。 int型私は、 memsetの(DP、 - 0x3f3f3f3f、はsizeof(DP))。// 注意初始化 ため(iは= 1 ; I <= N; I ++ ) { scanf関数(" %のD "、および[I])。 } のためには、(iは= 1 ; I <= N- 1、I ++ ) { int型のX、Y。 scanf関数(" %D%D "、およびX&Y)。 (x、y)を加えます。 (Y、X)を追加します。 } DFS(1、0 ); coutの << ANS; }