我tm又把n和m打反了。
為什麼我找到的並查集的題都基本上可以用kruskal做啊。。並查集明明可以幹很多事情的好不好。。
既然要把n個點連成k個「塊」,那自然想到連邊要連n-k條。
我們對所有邊資訊按照邊權公升序排序,然後列舉所有邊,如果有一條邊連線的兩個點不在同一集合就合併並維護相關資訊。
(這tm還是kruskal,做了多少了都)
如果發現已經連好了n-k條邊輸出權值和就好。
最後就是無解的情況了。
1 #include 2 #include 3 #include 4 #include 5#define maxn 1000005
6using
namespace
std;
7 inline int
read()
2021
struct
edge
26};
27edge edge[maxn];
28int
father[maxn];
29int
n,m,k,ans;
30int totedge = 0;31
void
init()
35int find(int
x)40
intmain()
48 sort(edge+1,edge+m+1
);49
init();
50for (int i=1;i<=m;i++)
56if (totedge == n-k)60}
61 printf("
no answer");
62return0;
63 }
口袋的天空
小杉坐在教室裡,透過口袋一樣的窗戶看口袋一樣的天空。有很多雲飄在那裡,看起來很漂亮,小杉想摘下那樣美的幾朵雲,做成棉花糖。給你雲朵的個數n,再給你m個關係,表示哪些雲朵可以連在一起。現在小杉要把所有雲朵連成k個棉花糖,乙個棉花糖最少要用掉一朵雲,小杉想知道他怎麼連,花費的代價最小。輸入格式 每組測試...
口袋的天空
小杉坐在教室裡,透過口袋一樣的窗戶看口袋一樣的天空。有很多雲飄在那裡,看起來很漂亮,小杉想摘下那樣美的幾朵雲,做成棉花糖。給你雲朵的個數n,再給你m個關係,表示哪些雲朵可以連在一起。現在小杉要把所有雲朵連成k個棉花糖,乙個棉花糖最少要用掉一朵雲,小杉想知道他怎麼連,花費的代價最小。輸入格式 每組測試...
P1195 口袋的天空
小杉坐在教室裡,透過口袋一樣的窗戶看口袋一樣的天空。有很多雲飄在那裡,看起來很漂亮,小杉想摘下那樣美的幾朵雲,做成棉花糖。給你雲朵的個數n,再給你m個關係,表示哪些雲朵可以連在一起。現在小杉要把所有雲朵連成k個棉花糖,乙個棉花糖最少要用掉一朵雲,小杉想知道他怎麼連,花費的代價最小。輸入格式 每組測試...