洛谷 P2121 拆地毯

2022-03-07 00:58:33 字數 1184 閱讀 1431

洛谷 p2121 拆地毯

還記得 noip 2011 提高組 day1 中的鋪地毯嗎?時光飛逝,光陰荏苒,三年過去了。組織者精心準備的頒獎典禮早已結束,留下的則是被人們踩過的地毯。請你來解決類似於鋪地毯的另乙個問題。

會場上有 n 個關鍵區域,不同的關鍵區域由 m 條無向地毯彼此連線。每條地毯可由三個整數 u、v、w 表示,其中 u 和 v 為地毯連線的兩個關鍵區域編號,w 為這條地毯的美麗度。

由於頒獎典禮已經結束,鋪過的地毯不得不拆除。為了貫徹勤儉節約的原則,組織者被要求只能保留 k 條地毯,且保留的地毯構成的圖中,任意可互相到達的兩點間只能有一種方式互相到達。換言之,組織者要求新圖中不能有環。現在組織者求助你,想請你幫忙算出這 k 條地毯的美麗度之和最大為多少。

輸入格式:

第一行包含三個正整數 n、m、k。

接下來 m 行中每行包含三個正整數 u、v、w。

輸出格式:

只包含乙個正整數,表示這 k 條地毯的美麗度之和的最大值。

輸入樣例#1: 複製

5 4 3

1 2 10

1 3 9

2 3 7

4 5 3

輸出樣例#1: 複製

22

選擇第 1、2、4 條地毯,美麗度之和為 10 + 9 + 3 = 22。

若選擇第 1、2、3 條地毯,雖然美麗度之和可以達到 10 + 9 + 7 = 26,但這將導致關鍵區域 1、2、3 構成乙個環,這是題目中不允許的。

1<=n,m,k<=100000

思路:最小生成樹(不過因為限制了k條變,所以只需要迴圈到tot==k即可)

難度:普及/提高-

#include#include

using

namespace

std;

intn, m, k;

int tot, sum; //

tot記錄邊數,sum記錄已經加上的美麗總數

int fa[100005

];struct

nond e[

100005

];int find(int

x) bool

cmp(nond a, nond b)

intmain()

printf("%d

", sum);

return0;

}

洛谷p2121拆地毯

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

最小生成樹 p2121 拆地毯

題目描述 p2121 拆地毯 這題為什麼是最大生成樹.先來bb兩句 題目為拆地毯,讓我們剩下k個地毯.題目想要我們求得最大的美麗度.且要求我們 保留的地毯構成的圖中,任意可互相到達的兩點間只能有一種方式互相到達 很明顯,這一要求提示了我們最後結構會是一棵樹 因為樹上路徑唯一啊,qwq.然後根據正難則...

洛谷 P1003 鋪地毯

題目描述 為了準備乙個獨特的頒獎典禮,組織者在會場的一片矩形區域 可看做是平面直角座標系的第一象限 鋪上一些矩形地毯。一共有 n 張地毯,編號從 1 到n 現在將這些地毯按照編號從小到大的順序平行於座標軸先後鋪設,後鋪的地毯覆蓋在前面已經鋪好的地毯之上。地毯鋪設完成後,組織者想知道覆蓋地面某個點的最...