洛谷P1195 口袋的天空

2022-05-01 10:36:09 字數 1442 閱讀 1199

題目提供者該使用者不存在

標籤雲端

難度普及+/提高

時空限制1s / 128mb

提交  討論  題解  

小杉坐在教室裡,透過口袋一樣的窗戶看口袋一樣的天空。

有很多雲飄在那裡,看起來很漂亮,小杉想摘下那樣美的幾朵雲,做成棉花糖。

給你雲朵的個數n,再給你m個關係,表示哪些雲朵可以連在一起。

現在小杉要把所有雲朵連成k個棉花糖,乙個棉花糖最少要用掉一朵雲,小杉想知道他怎麼連,花費的代價最小。

輸入格式:

每組測試資料的

第一行有三個數n,m,k(1<=n<=1000,1<=m<=10000,1<=k<=10)

接下來m個數每行三個數x,y,l,表示x雲和y雲可以通過l的代價連在一起。(1<=x,y<=n,0<=l<10000)

30%的資料n<=100,m<=1000

輸出格式:

對每組資料輸出一行,僅有乙個整數,表示最小的代價。

如果怎麼連都連不出k個棉花糖,請輸出'no answer'。

輸入樣例#1:

3 1 2

1 2 1

輸出樣例#1:

1

廈門一中yms原創

分析:其實這道題就是讓我們求k個最小生成樹的代價,對於此,我們從只求1個最小生成樹的情況考慮.如果只求乙個最少生成樹,那麼我們需要連n-1條邊,如果要求兩個呢?那麼我們從這n-1條邊中刪掉一條邊即可,也就是n-2條邊。我們可以發現,求k個最小生成樹就是要連n-k條邊,我們只需要把邊按邊權排序將不連通的兩個節點連邊,直到連n-k條邊即可.

#include #include 

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn=1000+20,maxm=100000+20

;struct nodee[maxm];

int n,m,k,ans=0

,p[maxn];

bool cmp(const node x,const

node y)

int find(int

x)int

main()

sort(e+1,e+m+1

,cmp);

int tot=0

;

for(int i=1;i<=n;i++) p[i]=i;

for(int i=1;i<=m;i++)

if(tot==(n-k)) break

; }

printf(

"%d\n

",ans);

return0;

}

洛谷P1195 口袋的天空

小杉坐在教室裡,透過口袋一樣的窗戶看口袋一樣的天空。有很多雲飄在那裡,看起來很漂亮,小杉想摘下那樣美的幾朵雲,做成棉花糖。給你雲朵的個數n,再給你m個關係,表示哪些雲朵可以連在一起。現在小杉要把所有雲朵連成k個棉花糖,乙個棉花糖最少要用掉一朵雲,小杉想知道他怎麼連,花費的代價最小。輸入格式 每組測試...

洛谷P1195 口袋的天空

小杉坐在教室裡,透過口袋一樣的窗戶看口袋一樣的天空。有很多雲飄在那裡,看起來很漂亮,小杉想摘下那樣美的幾朵雲,做成棉花糖。給你雲朵的個數 n 再給你 m 個關係,表示哪些雲朵可以連在一起。現在小杉要把所有雲朵連成 k 個棉花糖,乙個棉花糖最少要用掉一朵雲,小杉想知道他怎麼連,花費的代價最小。輸入格式...

洛谷P1195 口袋的天空

題目背景 小杉坐在教室裡,透過口袋一樣的窗戶看口袋一樣的天空。有很多雲飄在那裡,看起來很漂亮,小杉想摘下那樣美的幾朵雲,做成棉花糖。題目描述 給你雲朵的個數n,再給你m個關係,表示哪些雲朵可以連在一起。現在小杉要把所有雲朵連成k個棉花糖,乙個棉花糖最少要用掉一朵雲,小杉想知道他怎麼連,花費的代價最小...