前往
大廳
主題

ZeroJudge - g309: pC. 傳遞杯子蛋糕(Cupcake) 解題心得

Not In My Back Yard | 2021-09-20 00:00:10 | 巴幣 10 | 人氣 270

題目連結:


題目大意:
輸入第一列給定兩正整數 N 、 K(1 ≦ N ≦ 10),代表有 N 隻動物(編號為 0 ~ N - 1)且有 K 個杯子蛋糕。接下來有 N 列輸入,每列給定三整數 a 、 L 、 R(0 ≦ a < N,-1 ≦ L 、 R < N),代表編號 a 的節點(動物)有兩個直接的子節點分別以編號 L 、 R 作為左、右子節點,但當 L 或 R 之值為 -1 時則代表沒有該邊之子節點。

一開始編號 0 的動物會接受到 K 個杯子蛋糕,而他將會按照他的直接之子節點的數量加上他自己的動物總數 C 來試圖平分這些杯子蛋糕(即 K ÷ C)。假設平分量為 X 則他自己與其直接子節點將各自拿到 X 個杯子蛋糕,而剩下除不盡的餘數部分(如果有的話)則將留給他自己獨佔。而接受到 X 個杯子蛋糕的子節點(們)又會繼續分給它們各自的(直接)子節點直到抵達到最下層的節點,而這些節點沒有子節點(即葉節點)。

試問每個編號的動物各自拿到多少杯子蛋糕?



範例輸入:
6 9
0 1 2
1 3 4
2 5 -1
3 -1 -1
4 -1 -1
5 -1 -1


範例輸出:
3 1 2 1 1 1


解題思維:
就是單純地從編號 0 開始深度優先搜尋(Depth First Search,DFS)或是廣度優先搜尋(Breadth First Search,BFS)去探訪每個節點(記得將每個節點接受到的杯子蛋糕之資訊存起來)便可以知道每個節點最後得到多少個杯子蛋糕,即是所求。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

相關創作

更多創作