求助,kruskal为什么写得不对?
  • 板块学术版
  • 楼主Mr_yeh
  • 当前回复7
  • 已保存回复9
  • 发布时间2024/1/9 22:09
  • 上次更新2024/1/10 14:02:33
查看原帖
求助,kruskal为什么写得不对?
852827
Mr_yeh楼主2024/1/9 22:09
#include<bits/stdc++.h>
using namespace std;
const int N=(int)1e5+10;
struct Edge{
	int a,b,c;
}edge[N]; 
int fa[N];
void init(int n){for(int i=1;i<=n;i++) fa[i]=i;}
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
void add(int a,int b){fa[find(a)]=find(b);}
bool cmp(Edge x,Edge y){return x.c<y.c;}
int main(){
	int n,m,cnt=0,ret=0;
	scanf("%d%d",&n,&m);
	init(n);
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&edge[i].a,&edge[i].b,&edge[i].c);
		add(edge[i].a,edge[i].b);
	}
	sort(edge+1,edge+m+1,cmp);
	for(int i=1;i<=m;i++){
		int tx=find(edge[i].a),ty=find(edge[i].b);
		if(tx!=ty){
			ret+=edge[i].c;
			cnt++;
		}
	}
	if(cnt!=n-1) printf("-1\n");
	else printf("%d\n",ret);
	return 0;
}

2024/1/9 22:09
加载中...