uva 10859 Placing Lampposts (樹形dp)

來源:互聯網
上載者:User

本文出自   http://blog.csdn.net/shuangde800

題目: 點擊開啟連結

題目大意

給你一個n個點m條邊的無向無環圖,在盡量少的節點上放燈,使得所有邊都被照亮。每盞燈將照亮以它為一個端點的所有邊。

在燈的總數最小的前提下,被兩盞燈同時被照亮的邊數應該盡量大。

思路

這是LRJ《訓練指南》上的例題。

這題教會了我一個很有用的技巧:有兩個所求的值要最佳化,比如讓a盡量小,b也盡量小

那麼可以轉化為讓
M*a+b盡量小,其中M應該是一個比“a的最大值和b的最小值之差”還要大的數

最終的答案為ans/M, ans%M


回到這題,要求放的燈總數最小,被兩盞燈同時照亮的邊數盡量大。

因為每條邊要麼被一盞燈照亮,要麼被兩盞燈照亮,所以可以轉換為:

求:放的燈總數量最少,被一盞燈照亮的邊數盡量少。

就可以變成球 M*a+b 的最小值,a為放置的燈數量,b為被一盞燈照的邊數


f[u][1]表示u點放燈時的整個子樹最小值
f[u][0]表示u點不放燈時的整個子樹最小值

如果u放,那麼u個子結點可以選擇放,也可以不放,選擇其中較小的值。如果選的是不照,就要增加一條只有一個燈照的邊

如果u不放,那麼其子結點就必須選擇要放,而且每條邊都只有一個燈照


下面的My Code和書上實現的不一樣,更簡潔



代碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.