#include#include#includeusing namespace std;
int n,m,tot=0,k=0;//n端點總數,m邊數,tot記錄最終答案,k已經連線了多少邊
int fat[200010];//記錄集體老大
struct node
edge[200010];
bool cmp(const node &a,const node &b)//sort排序(當然你也可以快排)
int father(int x)//找集體老大,並查集的一部分
void unionn(int x,int y)//加入團體,並查集的一部分
int main()
for(int i=1;i<=n;i++) fat[i]=i;//自己最開始就是自己的老大 (初始化)
sort(edge+1,edge+1+m,cmp);//按權值排序(kruskal的體現)
for(int i=1;i<=m;i++)//從小到大遍歷 }
printf("%d",tot);
return 0;
}
kruskal 最小生成樹
include include 產生隨機數組用 include 同上 include using namespace std 1 帶權邊的類myarc class myarc bool operator const myarc arc myarc myarc int beginvex,int end...
最小生成樹Kruskal
最小生成樹有兩個特點,乙個是保證了所有邊的和是最小值,另乙個是保證了所有邊中的最大值最小。struct edge bool friend operator edge a,edge b 構邊 vectoredge int id max int mini void initial void input ...
最小生成樹(kruskal)
kruskal演算法 1 記graph中有v個頂點,e個邊 2 新建圖graphnew,graphnew中擁有原圖中相同的e個頂點,但沒有邊 3 將原圖graph中所有e個邊按權值從小到大排序 4 迴圈 從權值最小的邊開始遍歷每條邊 直至圖graph中所有的節點都在同乙個連通分量中 if 這條邊連線...