bzoj 1104 貪心 並查集

2021-07-30 11:14:05 字數 3817 閱讀 3313

題意:n*m的網格,所有格仔都被水淹沒,給定一些關鍵點,求用最少的抽水機抽乾所有關鍵點的水(水的流動遵循連通器原理)

我覺得這道題的真名應該叫做 「被水淹沒,不知所措」,

考試的時候自己yy出來的好棒棒= =,

蠻好的一道題

經過貪心可知,

(1)一定存在一種最優解使所有的水幫浦都在關鍵點上

(2)由於水都是從高往低留,所以一定會優先放置高度低的關鍵點

那麼我們將所有關鍵點按照高度排序,從小到大列舉每個關鍵點

考慮,如果我們在格仔a放了個水幫浦,那麼當且僅當a到b存在一條路徑滿足這條路徑上的高度全都小於等於格仔b的高度時,a處的水幫浦能抽乾b

那麼我們可對於乙個格仔i,我們找到它周圍所有高度都不大於它的格仔,與i合併

為什麼可以合併呢?

因為這些格仔中,只要任意乙個放了水幫浦,那麼i就可以被抽乾

如果格仔i是關鍵點,並且當i和周圍所有高度不大於它的格仔全都合併後沒有任何乙個集合是放過水幫浦的,那麼我們就把答案+1並把這個集合置為真(真表示這個集合放過水幫浦,即集合裡的所有點都可以被抽乾)

整理一下思路,

我們需要兩次排序,一次是將所有關鍵點按高度從小到大排序,一次是把所有點按高度排序

從小到大列舉關鍵點,

當我們判斷乙個關鍵點x是否需要新加乙個水幫浦的時候,需要把地圖上所有高度小於等於該點高度的格仔都按上述合併,即把它和它周圍高度小於等於它的合併(相當於乙個預處理,如果對於每個關鍵點x現順著捯做bfs的話,可能會t,也可能是蒟蒻寫醜了)

並查集維護的是同組資訊(可以共用乙個水幫浦的點集),在合併的時候,如果任意乙個集合的標記為真,則合併後的的標記為真

找到x所在集合,判斷標記是否為真,如果是假,則答案+1並標記置為真

導遊 (並查集 貪心)

幫助mr.he找出所有遊客帶到目的地,且往返次數最少的路線,如果不能把遊客送到目的地,輸出 no 輸入格式 第一行兩個整數n和r,分別表示城市數量和道路數量,各城市編號為1.n。接下來的r行,每行3個整數 a b p,表示道路ab的最大載客量為p。最後有若干行,每包含3個整數 s d t,分別表示出...

2054 貪心 並查集

貪心的總體思路是 每次找到乙個權值最大的節點,如果它是根節點,則首先對它染色,否則的話我們可以得出乙個結論,在對它的父親已經染色的情況下,立刻給它染色是最優的。現在重點討論第二種情況,當它不是根節點時,我們如果對它父親染了色,則一定會立刻對它染色,所以可以把它和它父親合併為同乙個節點,它和它父親的兒...

Supermarket(貪心 並查集)

題目鏈結 原創的部落格 題意 超市裡有n個商品.第i個商品必須在保質期 第di天 之前賣掉,若賣掉可讓超市獲得pi的利潤。每天只能賣乙個商品。現在你要讓超市獲得最大的利潤。n p i d i 範圍都在10000以內 include include include include include in...