網易2018程式設計題之遊歷魔法王國

2021-08-08 02:26:38 字數 2047 閱讀 3585

題目描述:

魔法王國一共有n個城市,編號為0~n-1號,n個城市之間的道路連線起來恰好構成一棵樹。

小易現在在0號城市,每次行動小易會從當前所在的城市走到與其相鄰的乙個城市,小易最多能行動l次。

如果小易到達過某個城市就視為小易遊歷過這個城市了,小易現在要制定好的旅遊計畫使他能遊歷最多的城市,請你幫他計算一下他最多能遊歷過多少個城市(注意0號城市已經遊歷了,遊歷過的城市不重複計算)。

輸入描述:

輸入包括兩行,第一行包括兩個正整數n(2 ≤ n ≤ 50)和l(1 ≤ l ≤ 100),表示城市個數和小易能行動的次數。

第二行包括n-1個整數parent[i](0 ≤ parent[i] ≤ i), 對於每個合法的i(0 ≤ i ≤ n - 2),在(i+1)號城市和parent[i]間有一條道路連線。

輸出描述:

輸出乙個整數,表示小易最多能遊歷的城市數量。

輸入例子1:

5 2

0 1 2 3

輸出例子1:

3題目理解:

輸入第一行:第乙個值為城市個數n,按照下面「i+1號城市和parent[i]間有一條道路連線」可以知道,每個城市的編號為0到n-1,parent[i]代表的是某乙個城市。第二個值是行動次數,也就是從乙個城市移到另乙個城市的次數,注意,往復返回也算是一次,例如:0->1算一次,1->0也算一次。

輸入第二行:有n-1個輸入,第i個輸入的城市號與編號為i+1的城市有一條相通的道路。而第i個輸入的城市號必須小於等於i且大於等於0才算是合法,這其實是解題的關鍵。

解題思路:

前面不知道算不算提示,城市間連線成一棵樹。那麼我們首先想到的是深度遍歷這棵樹,找到最大深度max_depth,然後與l比較。如果最大深度max_depth-1>l,則可直接列印l+1,這裡為什麼要減1比較,後面又要加1呢。因為一開始,我們假設小易在0城市,0城市的深度為1,那麼當達到最大深度時,我們只用了max_depth-1步,當其大於(可以等於)l時,那麼l步都可以順著這條路徑走,走l步加上原來0城市,就經歷了l+1個城市。當max_depth-1小於l時,意味著我們可以用剩下的步數去走其他城市。

我們從輸入的資訊「第i個輸入的城市號與編號為i+1的城市有一條相通的道路」可以知道,編號為i+1的城市都至少與前面的0到i號中的任意乙個城市有一條連線。對於在最大深度路徑結點上分叉的路徑,我們每走乙個分叉路徑上的結點,若要返回到原來最大深度路徑上的結點,總共需要耗費2步,簡單來說,若假設走的分叉結點個數為 k ,我們要花費 k 步原路返回,總共花費就是 2k 了。那麼我們繼續選擇最大深度的路徑,走分叉的路徑需要兩步,那我們將剩下步數除以2取整就可以得到我們能走的分叉城市個數了。當然這裡還要判斷走完分叉城市個數加上最大深度路徑的城市個數是否大於總城市個數,牛客上沒有這個邊界,顧不討論。下面貼上python**:

n,l=map(int,raw_input().split(' '))

parent_node=[int(x) for x in raw_input().split(' ')]

#每個節點的最大深度列表,引索對應的是城市編號,0初始化為1

node_depth=[0]*n

node_depth[0]=1

for i in range(n-1):

#當前城市的下乙個連線城市的最大深度等於當前城市的最大深度+1

node_depth[i+1]=node_depth[parent_node[i]]+1

#取出最大深度比較

max_depth=max(node_depth)

if max_depth-1>l:

print l+1

else:

#剩下能走的步數

leftover_steps=l-max_depth+1

#用剩下步數走其他城市的個數

other_cities=int(leftover_steps/2)

print max_depth+other_cities

網易 遊歷魔法王國

魔法王國一共有n個城市,編號為0 n 1號,n個城市之間的道路連線起來恰好構成一棵樹。小易現在在0號城市,每次行動小易會從當前所在的城市走到與其相鄰的乙個城市,小易最多能行動l次。如果小易到達過某個城市就視為小易遊歷過這個城市了,小易現在要制定好的旅遊計畫使他能遊歷最多的城市,請你幫他計算一下他最多...

遊歷魔法王國(網易)

時間限制 1秒 空間限制 32768k 魔法王國一共有n個城市,編號為0 n 1號,n個城市之間的道路連線起來恰好構成一棵樹。小易現在在0號城市,每次行動小易會從當前所在的城市走到與其相鄰的乙個城市,小易最多能行動l次。如果小易到達過某個城市就視為小易遊歷過這個城市了,小易現在要制定好的旅遊計畫使他...

2018網易 遊歷魔法王國

題目 魔法王國一共有n個城市,編號為0 n 1號,n個城市之間的道路連線起來恰好構成一棵樹。小易現在在0號城市,每次行動小易會從當前所在的城市走到與其相鄰的乙個城市,小易最多能行動l次。如果小易到達過某個城市就視為小易遊歷過這個城市了,小易現在要制定好的旅遊計畫使他能遊歷最多的城市,請你幫他計算一下...