洛谷 P1272 重建道路

2021-08-03 08:36:54 字數 1873 閱讀 1896

題目描述

一場可怕的**後,人們用n個牲口棚(1≤n≤150,編號1..n)重建了農夫john的牧場。由於人們沒有時間建設多餘的道路,所以現在從乙個牲口棚到另乙個牲口棚的道路是惟一的。因此,牧場運輸系統可以被構建成一棵樹。john想要知道另一次**會造成多嚴重的破壞。有些道路一旦被毀壞,就會使一棵含有p(1≤p≤n)個牲口棚的子樹和剩餘的牲口棚分離,john想知道這些道路的最小數目。

輸入輸出格式

輸入格式:

第1行:2個整數,n和p

第2..n行:每行2個整數i和j,表示節點i是節點j的父節點。

輸出格式:

單獨一行,包含一旦被破壞將分離出恰含p個節點的子樹的道路的最小數目。

輸入輸出樣例

輸入樣例#1:

11 6

1 2

1 3

1 4

1 5

2 6

2 7

2 8

4 9

4 10

4 11

輸出樣例#1:

2 說明

【樣例解釋】

如果道路1-4和1-5被破壞,含有節點(1,2,3,6,7,8)的子樹將被分離出來

program df;

type point=^node;

node=record

ends:longint;

next:point;

end;

var i,j,n,m,x,y,z,k,t:longint;

c,d:array[0..100000] of longint;

f:array[0..150,0..150] of longint;

path:array[0..100000] of point;

function min(x,y:longint):longint;

begin

if x>y then exit(y)

else exit(x);

end;

procedure com(x,y:longint);

var i:point;

begin

i:=path[x];

new(path[x]);

path[x]^.ends:=y;

path[x]^.next:=i;

end;

procedure dfs(x:longint);

var i:point;

y,j,k,t:longint;

begin

f[x,1]:=d[x];

i:=path[x];

while i<>nil do

begin

y:=i^.ends;

dfs(y);

for j:=m downto 2 do

for k:=1 to j-1 do

f[x,j]:=min(f[x,j],f[x,j-k]+f[y,k]-2);

i:=i^.next;

end;

end;

begin

readln(n,m);

for i:=1 to n-1 do

begin

readln(x,y);

com(x,y);

inc(d[x]);

inc(d[y]);

end;

fillchar(f,sizeof(f),$3f);

dfs(1);

t:=f[0,0];

for i:=1 to n do

if t>f[i,m] then t:=f[i,m];

writeln(t);

end.

洛谷 P1272 重建道路

題目描述 一場可怕的 後,人們用n個牲口棚 1 n 150,編號1.n 重建了農夫john的牧場。由於人們沒有時間建設多餘的道路,所以現在從乙個牲口棚到另乙個牲口棚的道路是惟一的。因此,牧場運輸系統可以被構建成一棵樹。john想要知道另一次 會造成多嚴重的破壞。有些道路一旦被毀壞,就會使一棵含有p ...

洛谷P1272 重建道路

一場可怕的 後,人們用n個牲口棚 1 n 150,編號1.n 重建了農夫john的牧場。由於人們沒有時間建設多餘的道路,所以現在從乙個牲口棚到另乙個牲口棚的道路是惟一的。因此,牧場運輸系統可以被構建成一棵樹。john想要知道另一次 會造成多嚴重的破壞。有些道路一旦被毀壞,就會使一棵含有p 1 p n...

洛谷P1272 重建道路

題目鏈結 一場可怕的 後,人們用n個牲口棚 1 n 150,編號1.n 重建了農夫john的牧場。由於人們沒有時間建設多餘的道路,所以現在從乙個牲口棚到另乙個牲口棚的道路是惟一的。因此,牧場運輸系統可以被構建成一棵樹。john想要知道另一次 會造成多嚴重的破壞。有些道路一旦被毀壞,就會使一棵含有p ...