Codevs P1380 沒有上司的舞會

2021-07-05 22:41:39 字數 3979 閱讀 8180

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...