洛谷P1195 口袋的天空

2021-08-22 02:38:26 字數 1379 閱讀 6504

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

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

給你雲朵的個數 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
對每組資料輸出一行,僅有乙個整數,表示最小的代價。

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

輸入樣例#1:

3 1 2

1 2 1

輸出樣例#1:

1
連線一條邊----連通塊數量減一

k個連通塊-----連(n-k)邊

運用kruskal演算法的思想:每次連可以連的邊中代價最小的 (貪心)

使用 並查集維護 

#include #include #include #include #include using namespace std;

int n,k,m;

int fa[1000050];

struct node a[1000005];

int cmp( const void *a , const void *b )

int find(int x)

void work(int x,int y)

int main()

qsort(a,m,sizeof(a[0]),cmp);

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

fa[i]=i;

int num=n-k;

int ans=0;

for(int i=0;iif(num)

cout<<"no answer"

cout<}

洛谷P1195 口袋的天空

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

洛谷P1195 口袋的天空

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

P1195 口袋的天空 洛谷

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