#include<iostream>
#include<algorithm>
#define MAX_V 100001
#define MAX_E 100001
using namespace std;
int set[MAX_V];
struct edge{
int u;
int v;
int cost;
};
edge es[MAX_E];
int V,E;
int find(int x){
while(set[x]!=x)
x=set[x];
return x;
}
int merge(int x,int y){
int fx=find(x);
int fy=find(y);
if(fx==fy)
return 0;
else
set[fx]=fy;
}
bool cmp(struct edge a,struct edge b){
return a.cost<b.cost;
}
int kruskal(){
sort(es,es+E,cmp);
int res=0;
for(int i=0;i<E;i++){
if(merge(es[i].u,es[i].v)){
res=res+es[i].cost;
}
}
return res;
}
最小生成树kruskal
最新推荐文章于 2022-03-01 21:39:08 发布