1. 程式人生 > >Bzoj 5195 [Usaco2018 Feb]Directory Traversal

Bzoj 5195 [Usaco2018 Feb]Directory Traversal

file bubuko mage 葉子 com 字符串 最小 bzoj 需要

Descrtiption

奶牛Bessie令人驚訝地精通計算機。她在牛棚的電腦裏用一組文件夾儲存了她所有珍貴的文件,比如:

bessie/

  folder1/

?    file1

?    folder2/

?      file2

  folder3/

?    file3

  file4

只有一個“頂層”的文件夾,叫做bessie。

Bessie可以瀏覽任何一個她想要訪問的文件夾。從一個給定的文件夾,每一個文件都可以通過一個“相對路徑”被引用。

在一個相對路徑中,符號“..”指的是上級目錄。如果Bessie在folder2中,她可以按下列路徑引用這四個文件:

../file1

file2

../../folder3/file3

../../file4

Bessie想要選擇一個文件夾,使得從該文件夾出發,對所有文件的相對路徑的長度之和最小。

\(N \leqslant 1e5\)

Solution

\(\,\,\,\,\,\,\,\,\,\,\,\)首先你得需要看懂題面(沒看懂再看一次,我可不會解釋)。典型的二次換根類題目。設\(len_i?\)為點i的名稱長度,設\(f_i?\)為i到所有葉子點的長度之和,先考慮如何算出根的f值,再考慮如何用一個點更新其兒子,以此類推。
\(\,\,\,\,\,\,\,\,\,\,\,\)根的值很好求,因為只需要往下走。再考慮如何更新兒子。
技術分享圖片

\(\,\,\,\,\,\,\,\,\,\,\,\) 用這個圖打個比方,假設每個點的字符串長度就等於自身編號。我們先預處理出1號點到所有葉子點的總長度,再考慮更新7號點。對於所有在7號點子樹內的葉子點,1號點必須先訪問到7號點再下走訪問各個點,所以7號點訪問這些點的總長度=1號點訪問的總長度-7號點子樹內個數\(\times (len_7+1)\)

,而除去7號點子樹以外的葉子點只需讓7號點先訪問到一號點之後就和1號點的訪問情況一樣了,所以7號點訪問這些點的總長度=1號點訪問的總長度+(總點數-7號點子樹內個數)\(\times 3\)。所以整合起來,7號點訪問所有葉子點的總長度=1號點訪問的總長度+總點數\(\times3-7\)號點子樹內個數\(\times (4+len_7)\)

Bzoj 5195 [Usaco2018 Feb]Directory Traversal