題意/description
:太平王世子事件後,陸小鳳成了皇上特聘的御前一品侍衛。
皇宮以午門為起點,直到後宮嬪妃們的寢宮,呈一棵樹的形狀;某些宮殿間可以互相望見。大內保衛森嚴,三步一崗,五步一哨,每個宮殿都要有人全天候看守,在不同的宮殿安排看守所需的費用不同。
可是陸小鳳手上的經費不足,無論如何也沒法在每個宮殿都安置留守侍衛。 讀入
/input:
幫助陸小鳳布置侍衛,在看守全部宮殿的前提下,使得花費的經費最少。 輸出
/output:
輸入檔案中資料表示一棵樹,描述如下:
第1行 n,表示樹中結點的數目。
第2行至第n+1行,每行描述每個宮殿結點資訊,依次為:該宮殿結點標號i(0
題解/
solution
:
題目說的很清楚,用最少的點覆蓋所有的點。題目給出的是個樹,所以可以用動態規劃來解決。
給出如下定義:
f[i,0]表示i點不放,且以i為根節點的子樹(包括i節點)全部被觀察到;
f[i,1]表示i點不放,且以i為根節點的子樹(可以不包括i節點)全部被觀察到;
f[i,2]表示i點放,且以i為根節點的子樹全部被觀察到;
轉移如下:
1、由f[i,0]定義可知,設j為i的兒子節點,至少要有乙個i的兒子節點是放置守衛的,其餘的兒子節點可放可不放,但由於根節點i不放,所以其餘的兒子節點如果不放的話,必須保證能被觀察到,即f[j][0];所以我們需要列舉必須放置的兒子節點,即下:
f[i,0] = min
其中k為列舉的必放的兒子節點,j為除了k之外的兒子節點
2、由f[i,1]定義可知,i可以被觀察到也可以不被觀察到,但兒子節點必須都要被觀察到,即下:
f[i,1] =∑(min(f[j,0],f[j,2]))
j是i的兒子節點
3、由f[i,2]定義可知,i點放置了守衛,所以對於每個兒子節點都能被觀察到,取f[j,0],f[j,1],f[j,2]最小值即可,即下:
f[i,2] = min(f[j,0],f[j,1],f[j,2]) j是i的兒子節點
對於葉節點i,f[i,0] = f[i,2] = data[i],f[i,1] = 0;
講得已經十分詳細了,剩下自己解決吧。
**/
code
:
var
son:array [0..1501,0..1501] of longint;
f:array [0..1501,1..3] of longint;
a,l:array [0..1501] of longint;
n,x,t:longint;
function min(o,p:longint):longint;
begin
if oj then
k:=k+min(f[son[x,j],1],f[son[x,j],3]);
f[x,1]:=min(f[x,1],k+f[son[x,i],3]);
end;
f[x,2]:=0;
for i:=1 to l[x] do
f[x,2]:=f[x,2]+min(f[son[x,i],1],f[son[x,i],3]);
f[x,3]:=a[x];
for i:=1 to l[x] do
f[x,3]:=f[x,3]+min(f[son[x,i],1],min(f[son[x,i],2],f[son[x,i],3]));
end;
procedure init;
var i,j:longint;
d:array [0..1501] of longint;
begin
readln(n);
fillchar(d,sizeof(d),0);
for i:=1 to n do
begin
read(x,a[x],l[x]);
for j:=1 to l[x] do
begin
read(son[x,j]);
inc(d[son[x,j]]);
end;
readln;
end;
for i:=1 to n do
if d[i]=0 then
begin
t:=i;
break;
end;
end;
begin
init;
main(t);
write(min(f[t,1],f[t,3]));
end.
皇宮看守(樹形dp)
description 太平王世子事件後,陸小鳳成了皇上特聘的御前一品侍衛。皇宮以午門為起點,直到後宮嬪妃們的寢宮,呈一棵樹的形狀 某些宮殿間可以互相望見。大內保衛森嚴,三步一崗,五步一哨,每個宮殿都要有人全天候看守,在不同的宮殿安排看守所需的費用不同。可是陸小鳳手上的經費不足,無論如何也沒法在每個...
皇宮看守 樹形DP
time limit 10000ms memory limit 65536k total submit 63 accepted 27 case time limit 1000ms description 太平王世子事件後,陸小鳳成了皇上特聘的御前一品侍衛。皇宮以午門為起點,直到後宮嬪妃們的寢宮,呈一...
皇宮看守 樹形DP
太平王世子事件後,陸小鳳成了皇上特聘的御前一品侍衛。皇宮以午門為起點,直到後宮嬪妃們的寢宮,呈一棵樹的形狀 某些宮殿間可以互相望見。大內保衛森嚴,三步一崗,五步一哨,每個宮殿都要有人全天候看守,在不同的宮殿安排看守所需的費用不同。可是陸小鳳手上的經費不足,無論如何也沒法在每個宮殿都安置留守侍衛。程式...