ural大學有n個職員,編號為1~n。他們有從屬關係,也就是說他們的關係就像一棵以校長為根的樹,父結點就是子結點的直接上司。每個職員有乙個快樂指數。現在有個周年慶宴會,要求與會職員的快樂指數最大。但是,沒有職員願和直接上司一起與會。
第一行乙個整數n。(1<=n<=6000)
接下來n行,第i+1行表示i號職員的快樂指數ri。(-128<=ri<=127)
接下來n-1行,每行輸入一對整數l,k。表示k是l的直接上司。
最後一行輸入0,0。
輸出最大的快樂指數。
7 1
1 1
1 1
1 1
1 3
2 3
6 4
7 4
4 5
3 5
0 0各個測試點1s
該題為樹形dp題,每個節點求得最大值顯然只有兩種情況
選該節點(不能選其子節點)
不選該節點(可以選子節點或不選子節點(因為可能選孫節點更優));
那麼動歸方程就很顯然(一點也不顯然/(ㄒ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
dobegin
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
——流沙河
一 雖然美麗
你不是花
園中 盆中 瓶中
鬢上 髻上 襟上
一切為別人裝飾的地方
沒有別人的位置
要說是花
該是雪花
你跳著迴旋舞到人間來
伴著群山沉沉入睡
夢見你的故鄉
那藍色的海洋
二 回憶走過的路
使我暗自驚心
為什麼要這樣曲曲彎彎
彎彎曲曲 浪費著生命
如果走成一條直線
豈不節省許多光陰
我才明白
原來步步都在向你靠近
要不是這樣彎曲地走
我們將永遠地陌生
迅速一秒就不再有相逢
恰如兩顆執行著的星星
四 遠遠地望我
是一座雪山
使你眼中結冰
心上生寒
沒有花香鳥語
沒有人煙
你來 耳朵貼在我的胸前
聽岩漿在呼嘯
浪滾波翻
相信我是一座火山
雖然沉睡多年
五 你要好好愛你自己
因為你是乙個奇蹟
從溷濁的池水中生長出來
不沾染半點汙泥
你是一朵雪白的荷花
孤單單照影在秋塘裡
你有一顆太純潔的心
使你忘卻自己的美麗
六 我們將為生活終日奔忙
早晨你送我出門
傍晚你等我回家
我們勤勞如暮春的工蜂
自己採的花最香
自己做的蜜最甜
讓花常開在家裡
讓燕子年年來拜訪我們
我們將珍惜每乙個幽夜
在燈下讀書
在窗前望月
在枕邊談笑
在夢中聽屋上的風雨
和鄰家的雞啼
讓塵世的紛爭遺忘我們
讓歲月在門外悄悄地走過
codevs1380 沒有上司的舞會
題目描述 description ural大學有n個職員,編號為1 n。他們有從屬關係,也就是說他們的關係就像一棵以校長為根的樹,父結點就是子結點的直接上司。每個職員有乙個快樂指數。現在有個周年慶宴會,要求與會職員的快樂指數最大。但是,沒有職員願和直接上司一起與會。輸入描述 input descri...
CODEVS 1380 沒有上司的舞會
題意 在一棵樹上每個點都有價值,在這些點裡找出一些互不相連的點並使其價值之和最大。標籤是樹形dp,於是我第一次就嘗試著用dp做,然而在讀入的時候這個題挖了個坑,讀入a,b,b是a的上司,然而我二話沒說就把a當做了b的上司,結果就做不出來了。然後第二次我就 think diffierent 用了一種貪...
CODEVS 1380沒有上司的舞會
include include include using namespace std vector sons 6010 int mmax int a,int b if f cur state 0 return f cur state int sum 0 for int i 0 iint tryso...