愛心蝸牛
提交檔案:badnews.pas/c/cpp
輸入檔案:badnews.in
輸出檔案:badnews.out
貓貓把嘴伸進池子裡,正準備「吸」魚吃,卻聽到門鈴響了。貓貓擦了擦臉上的水,開啟門一看,那人正是她的好朋友——川川。
川川手裡拿著一輛玩具汽車,對貓貓說:「這是我的新汽車!」接著,伴隨一陣塑料叩擊聲,玩具汽車的車門竟開了,乙隻蝸牛慢慢吞吞爬了出來。
「哇!這麼大的蝸牛……」貓貓驚訝道。
「這是我的寵物蝸牛,他叫點點。」川川介紹道。
「把他送給我好嗎?」貓貓央求道。
「可以讓他陪你幾天,但是不能送給你……」
點點沿著川川的身體,爬到了地上,又移到了貓貓的池子旁邊,只聽見貓貓向川川介紹她的「創意吃魚法」,心裡不禁起了一絲涼意:「這個女生太毒了……吃魚前還要玩魚……」轉眼一看,池中的魚依舊暢快地游來游去。
「或許這些魚聽不懂貓語吧……好在我會一點兒貓語,也會一點魚語……阿彌陀佛,善哉善哉。我還是救救這些魚吧……」點點自言自語,一邊費力地移動著身軀。他認識到——單憑自己的力量,把貓貓的陰謀告訴每一條魚,似乎不太可能——自己底盤太低,走不快,看來只得想其他辦法來傳達資訊。一翻認真思考之後,點點想到,如果把貓貓的計畫告訴其中一條魚,再讓魚們互相傳達訊息,那麼在相對較短的時間內,每條魚都會得知貓貓的計畫。
魚們的社會等級森嚴,除了國王菜魚之外,每條魚均有且只有乙個直接上級,菜魚則沒有上級。如果a是b的上級,b是c的上級,那麼a就是c的上級。
絕對不會出現這樣兩條魚a、b:a是b的上級,b也是a的上級。
最開始的時刻是0,點點要做的,就只是用1單位的時間把貓貓的陰謀告訴某一條「資訊源魚」,讓魚們自行散布訊息。在任意乙個時間單位中,任何一條已經接到通知的魚,都可以把訊息告訴他的乙個直接上級或者直接下屬。
現在,點點想知道:
1.到底需要多長時間,訊息才能傳遍池子裡的魚?
2.使訊息傳遞過程消耗的時間最短,可供選擇的「資訊源魚」有那些?
輸入資料:
第一行有乙個數n(n≤1000),表示池中的魚數,池魚按照1到n編上了號碼,國王菜魚的標號是1。
第2行到第n行(共n-1行),每一行乙個數,第i行的數表示魚i的直接上級的標號。
輸出資料:
對於每組輸入資料:
第一行有乙個數,表示最後一條魚接到通知的最早時間。
第二行有若干個數,表示可供選擇的魚f的標號,按照標號從小到大的順序輸出,中間用空格分開。
輸入樣例:
3 輸出樣例:
3 4 5 6 7
type
pnode=^node;
node=record
x:longint;
next:pnode;
end;
var n:longint;
map:array[1..1000]of pnode;
ans:longint;
ansi:array[1..1000]of longint;
f_bo:array[1..1000]of boolean;
c:array[1..1000,1..1000]of longint;
cs:array[1..1000]of longint;
anss:longint;
procedure init;
begin
assign(input,'badnews.in');
assign(output,'badnews.out');
reset(input); rewrite(output);
end;
procedure terminate;
begin
close(input); close(output);
halt;
end;
procedure insert(a,b:longint);
var p:pnode;
begin
new(p);
p^.next:=map[a];
p^.x:=b;
map[a]:=p;
end;
procedure qsort(s,t,n:longint);
var i,j:longint;
tem:longint;
x:longint;
begin
i:=s; j:=t;
x:=c[n,(s+t)shr 1];
repeat
while xj;
if inil do
begin
if f_bo[p^.x] then
begin
inc(cs[t]);
c[t,cs[t]]:=dfs(p^.x);
end;
p:=p^.next;
end;
if cs[t]=0 then exit(0);
qsort(1,cs[t],t);
for i:=1 to cs[t] do
if dfs
樹形DP 樹形DP四例
是時候練一下dp了!我的題單 portkey f u,if fu,i 表示以u uu為根節點的子樹中保留i ii條樹枝的最大蘋果數 f u,i max f max f fu,i max這些題是菜,但也不能輕視啊!include using namespace std define in read i...
HLOJ 樹形DP前置 DFS(樹形DP入門)
給定一棵 n nn 個點的樹,根為 t tt求每個點的父親是哪個點,t tt 的父親輸出 0 00第一行兩個整數 n,t n,tn,t接下來 n 1 n 1n 1 行,每行兩個整數 x,y x,yx,y,表示 x,y x,yx,y 之間有一條邊 n nn 行,第 i ii 行乙個整數,表示 i ii...
樹形dp小結
這些天做了一些樹形dp的題目,感覺有了些領悟,尤其是理解到樹形揹包就是分組揹包之後。選出幾道不錯的總結一下 hdu 1520 hdu 4003 poj 1155 poj 2486 hdu 4313 hdu 4340 hdu 1520 入門水題 每個節點有權值,子節點和父節點不能同時選,問最後能選的最...