最小生成樹 p2121 拆地毯

2022-05-27 17:51:10 字數 1285 閱讀 6709

題目描述--->p2121 拆地毯

這題為什麼是最大生成樹.

先來bb兩句

題目為拆地毯,讓我們剩下k個地毯.

題目想要我們求得最大的美麗度.

且要求我們

保留的地毯構成的圖中,任意可互相到達的兩點間只能有一種方式互相到達

很明顯,這一要求提示了我們最後結構會是一棵樹

(因為樹上路徑唯一啊,qwq.

然後根據正難則反的思想.

我們考慮拼地毯.

所以我們就想到了kruskal演算法.(`・ω・´)

與普通kruskal不同的是,這裡是乙個最大生成樹

我們拼到k個得到的最大美麗度就是答案

為什麼是拼到k個?

給大家乙個圖.

如果此時題目要求我們剩下6個地毯,很明顯我們將6個地毯放入同乙個並查集中就可滿足條件.

(已經預處理出較大美麗度的情況下)

拆地毯,讓我們剩下k個,因此我們合併出k個即可

所以就裸了

我們只需要對最小生成樹略微修改,把邊權從大到小排序即可.

注意判斷已經加入到同乙個並查集中的數量為k.

------------------**------------------

#include#define il inline

#define ri register int

using namespace std;

il void in(int &x)

while(s>='0' and s<='9')

x*=f;

}int fa[100008],n,m,ans,cnt,k;

struct eedge[400008];

il bool cmp(const e&a,const e&b)

//邊權從大到小排序.

il int find(int x)

//路徑壓縮並查集

il void kruskal()

}int main()

洛谷p2121拆地毯

這道題是找有k條邊的最大生成樹,我們使用乙個並查集,再定義乙個結構體,將邊的值排序,然後開始構建最大生成樹,如果有環的話說明在乙個集合中,有公共的祖先。include include using namespace std int fa 100001 struct node node b 10000...

洛谷 P2121 拆地毯

洛谷 p2121 拆地毯 還記得 noip 2011 提高組 day1 中的鋪地毯嗎?時光飛逝,光陰荏苒,三年過去了。組織者精心準備的頒獎典禮早已結束,留下的則是被人們踩過的地毯。請你來解決類似於鋪地毯的另乙個問題。會場上有 n 個關鍵區域,不同的關鍵區域由 m 條無向地毯彼此連線。每條地毯可由三個...

最小生成樹 次小生成樹

一 最小生成樹 說到生成樹首先要解釋一下樹,樹是乙個聯通的無向無環圖,多棵樹的集合則被稱為森林。因此,樹具有許多性質 1.兩點之間的路徑是唯一的。2.邊數等於點數減一。3.連線任意兩點都會生成乙個環。對於乙個無向聯通圖g的子圖,如果它包含g的所有點,則它被稱為g的生成樹,而各邊權和最小的生成樹則被稱...