HNOI2018 道路 樹形DP

2022-04-30 08:06:17 字數 1910 閱讀 5061

[hnoi2018]道路

題目描述:

w 國的交通呈一棵樹的形狀。w 國一共有 \(n-1\)個城市和 \(n\)個鄉村,

其中城市從 \(1\)到 \(n-1\)編號,鄉村從 \(1\)到 \(n\)編號,且 \(1\)號城市是首都。

道路都是單向的,本題中我們只考慮從鄉村通往首都的道路網路。

對於每乙個城市,恰有一條公路和一條鐵路通向這座城市。

對於城市\(i\), 通向該城市的道路(公路或鐵路)的起點,要麼是乙個鄉村,要麼是乙個編號比 \(i\)大的城市。

沒有道路通向任何鄉村。除了首都以外,從任何城市或鄉村出發只有一條道路;

首都沒有往 外的道路。從任何鄉村出發,沿著唯一往外的道路走,總可以到達首都。

w 國的國王小 w 獲得了一筆資金,他決定用這筆資金來改善交通。

由於資金有限,小 w 只能翻修 \(n-1\)條道路。

小 w 決定對每個城市翻修恰好一條通向它的道路,即從公路和鐵 路中選擇一條並進行翻修。

小 w 希望從鄉村通向城市可以盡可能地便利,於是根據人口調 查的資料,

小 w 對每個鄉村制定了三個引數,編號為 \(i\)的鄉村的三個引數是 \(a_ \; b_ \; c_ \)​。

假設 從編號為 \(i\)的鄉村走到首都一共需要經過 \(x\)條未翻修的公路與 \(y\)條未翻修的鐵路,那麼該鄉村 的不便利值為

\(c_ * (a_ + x) * (b_ + y)\)

在給定的翻修方案下,每個鄉村的不便利值相加的和為該翻修方案的不便利值。

翻修 \(n-1\)條道路有很多方案,其中不便利值最小的方案稱為最優翻修方案,

小 w 自然 希望找到最優翻修方案,請你幫助他求出這個最優翻修方案的不便利值。

輸入格式: 

第一行為正整數 \(n\)。

接下來 \(n-1\)行,每行描述乙個城市。其中第 \(i\)行包含兩個數 \(s_\;t_\)。 

\(s_\) 表示通向第 \(i\)座城市 的公路的起點, \(t_\)​表示通向第\(i\)座城市的鐵路的起點。

如果 \(s_ > 0\),那麼存在一條從第 \(s_\)​座城 市通往第 \(i\)座城市的公路,否則存在一條從第 \(s_\)個鄉村通往第\(i\)座城市的公路;

\(t_\)​類似地,如 果 \(t_>0\),那麼存在一條從第 \(t_\)座城市通往第\(i\)座城市的鐵路,否則存在一條從第 \(t_\)​個鄉村通 往第 \(i\)座城市的鐵路。

接下來 \(n\)行,每行描述乙個鄉村。

其中第\(i\)行包含三個數 \(a_\;b_\;c_\),其意義如題面所示。

輸出格式:

輸出一行乙個整數,表示最優翻修方案的不便利值。

改這題面真累。

看起來就像個dp題。

然後,可以發現是棵二叉樹。。。

先看資料估計狀態,通過計算,發現\(o(n*dep*dep)\)接近極限

不妨設狀態為\(dp(i,j,k)\)

表示對於\(i\)號節點而言,首都到它的路徑存在\(j\)個公路和\(k\)個鐵路的最小權值。

不難想出:

對於鄉村而言,\(dp(i,j,k)=a_*(b_+j)*(c_+k)\)

對於城市而言,\(dp(i,j,k)=min(dp(ls,j+1,k)+dp(rs,j,k),dp(ls,j,k)+dp(rs,j,k+1))\)

每一層中暴力列舉\(40*40\)次即可。

不用剪枝(反正複雜度過得去)

但是,空間開不下,因此要維護乙個表示當前鏈的棧

注意到在dp中,每個狀態只會被訪問到一次,因此訪問完\(x\),就可以**\(ls(x)\)和\(rs(x)\)了

時間複雜度:\(o(3200*n)\)

空間複雜度:\(o(40^*2)\)

這題為什麼難呢?

因為它給人一種數論題的感覺。

**在此

Hnoi2018 道路 樹形DP

w 國的交通呈一棵樹的形狀。w 國一共有 n 1 n 1 個城市和 n n 個鄉村,其中城市從 1 role presentation 11到 n 1 n 1 編號,鄉村從 1 1 到 n role presentation n n編號,且 1 1 號城市是首都。道路都是單向的,本題中我們只考慮從鄉...

心情 HNOI2018遊記

day 0.全機房的人好像都在做題。然而下午是社團節的遊園會,身為社幹的我風風雨雨在外面各種搬凳子搬椅子換場地招待外校同學 就這樣我好像什麼都沒有複習。晚上就一起去酒店了。大概因為是高一的緣故,並沒有非常的緊張。住進了酒店,滿腦子都是和豆豆 ww3113306 如何吃吃吃玩玩玩。非常開心的擺了一晚上...

比賽 HNOI2018 總結

一將功成萬骨枯,我就是給那些隊爺做基數的 看完題,暴力好打,然後就打 覺得第三題模型很好建啊,先看第三題吧 結果第三題是最。的 圖建出來,先看樹的情況,設dp試一下 結果一直只想著一維的dp,沒去想0 1狀態表示是否選取,於是老久都沒想出來 第一題一開始沒看到30分的狀壓,突然看到,然後就趕緊碼一下...