Codevs P1380 沒有上司的舞會

Codevs P1380 沒有上司的舞會


題目描述 Description

  Ural大學有N個職員,編號爲1~N。他們有從屬關係,也就是說他們的關係就像一棵以校長爲根的樹,父結點就是子結點的直接上司。每個職員有一個快樂指數。現在有個週年慶宴會,要求與會職員的快樂指數最大。但是,沒有職員願和直接上司一起與會。

輸入輸出


輸入描述 Input Description

第一行一個整數N。(1<=N<=6000)
接下來N行,第i+1行表示i號職員的快樂指數Ri。(-128<=Ri<=127)
接下來N-1行,每行輸入一對整數L,K。表示K是L的直接上司。
最後一行輸入0,0。

輸出描述 Output Description

輸出最大的快樂指數。


樣例 Sample


樣例輸入 Sample Input

7
1
1
1
1
1
1
1
1 3
2 3
6 4
7 4
4 5
3 5
0 0

樣例輸出 Sample Output

5


數據範圍及提示 Data Size & Hint

各個測試點1s

分析

該題爲樹形DP題,每個節點求得最大值顯然只有兩種情況

  1. 選該節點(不能選其子節點)
  2. 不選該節點(可以選子節點或不選子節點(因爲可能選孫節點更優));

    那麼動歸方程就很顯然(一點也不顯然/(ㄒoㄒ)/~~);
    f[i,0]表示不選第i個節點
    f[i,1]表示選擇第i各節點
    p^.e表示該點的子節點
    root表示根
    那麼

    f[i,1]:=f[i,1]+f[p^.e,0];(注意是累加,因爲兄弟間不互相影響)
    f[i,0]:=f[i,0]+max(f[p^.e,0],f[p^.e,1]);(同上)
    ans:=max(f[root,1],f[root,0])


代碼如下

program p1380;
type point=^rec;
     rec=record
      e:longint;
      s:point;
     end;
var conviviality:array[1..6000] of longint;
    vertex:array[1..6000] of point;
    s,e,i,j,k,n,root:longint;
    father:array[1..6000] of integer;
    f:array[1..6000,0..1] of longint;
function max(a,b:longint):longint;
begin
 if a>b then exit(a);
 exit(b);
end;

procedure dp(head:longint);
var p:point;
begin
 p:=vertex[head];
 if p=nil
  then
   begin
    f[head,1]:=conviviality[head];
    exit;
   end;
 f[head,1]:=conviviality[head];
 while p<>nil do
  begin
   dp(p^.e);
   f[head,1]:=f[head,1]+f[p^.e,0];
   f[head,0]:=f[head,0]+max(f[p^.e,1],f[p^.e,0]);
   p:=p^.s;
  end;
end;
procedure insert(s,e:longint);
var p:point;
begin
 new(p);
 p^.e:=e;
 p^.s:=vertex[s];
 vertex[s]:=p;
end;

begin
 readln(n);
 for i:=1 to n do
  readln(conviviality[i]);
 fillchar(f,sizeof(f),0);
 fillchar(father,sizeof(father),0);
 readln(e,s);
 while (s<>0) and (e<>0) do
  begin
   insert(s,e);
   father[e]:=s;
   readln(e,s);
  end;
 for i:=1 to n do
  if father[i]=0
   then break;
 root:=i;
 dp(root);
 write(max(f[root,1],f[root,0]));
end.

評測結果

運行結果
測試點#1.in 結果:AC 內存使用量: 256kB 時間使用量: 1ms
測試點#10.in 結果:AC 內存使用量: 496kB 時間使用量: 1ms
測試點#2.in 結果:AC 內存使用量: 256kB 時間使用量: 1ms
測試點#3.in 結果:AC 內存使用量: 256kB 時間使用量: 1ms
測試點#4.in 結果:AC 內存使用量: 256kB 時間使用量: 1ms
測試點#5.in 結果:AC 內存使用量: 256kB 時間使用量: 1ms
測試點#6.in 結果:AC 內存使用量: 256kB 時間使用量: 1ms
測試點#7.in 結果:AC 內存使用量: 256kB 時間使用量: 1ms
測試點#8.in 結果:AC 內存使用量: 496kB 時間使用量: 2ms
測試點#9.in 結果:AC 內存使用量: 496kB 時間使用量: 1ms

#

情詩六首

——流沙河

雖然美麗
你不是花
園中 盆中 瓶中
鬢上 髻上 襟上
一切爲別人裝飾的地方
沒有別人的位置
要說是花
該是雪花
你跳着迴旋舞到人間來
伴着羣山沉沉入睡
夢見你的故鄉
那藍色的海洋



回憶走過的路
使我暗自驚心
爲什麼要這樣曲曲彎彎
彎彎曲曲 浪費着生命
如果走成一條直線
豈不節省許多光陰
我才明白
原來步步都在向你靠近
要不是這樣彎曲地走
我們將永遠地陌生
迅速一秒就不再有相逢
恰如兩顆運行着的星星



遠遠地望我
是一座雪山
使你眼中結冰
心上生寒
沒有花香鳥語
沒有人煙
你來
耳朵貼在我的胸前
聽岩漿在呼嘯
浪滾波翻
相信我是一座火山
雖然沉睡多年



你要好好愛你自己
因爲你是一個奇蹟
從溷濁的池水中生長出來
不沾染半點污泥
你是一朵雪白的荷花
孤單單照影在秋塘裏
你有一顆太純潔的心
使你忘卻自己的美麗



我們將爲生活終日奔忙
早晨你送我出門
傍晚你等我回家
我們勤勞如暮春的工蜂
自己採的花最香
自己做的蜜最甜
讓花常開在家裏
讓燕子年年來拜訪我們
我們將珍惜每一個幽夜
在燈下讀書
在窗前望月
在枕邊談笑
在夢中聽屋上的風雨
和鄰家的雞啼
讓塵世的紛爭遺忘我們
讓歲月在門外悄悄地走過

這裏寫圖片描述
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章