小杉坐在教室裡,透過口袋一樣的窗戶看口袋一樣的天空。
有很多雲飄在那裡,看起來很漂亮,小杉想摘下那樣美的幾朵雲,做成棉花糖。
給你雲朵的個數 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:複製1 2 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個棉花糖,乙個棉花糖最少要用掉一朵雲,小杉想知道他怎麼連,花費的代價最小。輸入格式 每組測試...