kruskal算法最后一个点不对,怎么办
查看原帖
kruskal算法最后一个点不对,怎么办
1352625
mopeicong楼主2024/8/16 10:12

代码如下

#include<bits/stdc++.h>
using namespace std;
int parent[1000010],n,cnt,m;

struct node{
	int from,to;
	int weight;
}edge[1000010];

void add(int i,int j,int w){
	cnt++;
	edge[cnt].from = i;
	edge[cnt].to = j;
	edge[cnt].weight = w;
}

bool cmp(node x,node y){
	return x.weight < y.weight;
}

int findroot(int x){
	if(parent[x]!=x){
		parent[x]=findroot(parent[x]);
	}
	return parent[x];
}

int main(){
	int u,v,w,ans=0,c=0;
	cin>>n>>m;
	for(int i=1;i<=n;i++) parent[i]=i;
	for(int i=1;i<=m;i++){
		cin>>u>>v>>w;
		add(u,v,w);
	}
	sort(edge+1,edge+1+cnt,cmp);
	for(int i=1;i<=cnt;i++){
		int u=edge[i].from;
		int v=edge[i].to;
		if(findroot(u)==findroot(v)) continue;
		parent[findroot(u)] = findroot(v);
		ans += edge[i].weight;
		c++;
		if(c==n-1){
			break;
		}
	}
	cout<<ans;
	return 0;
}
2024/8/16 10:12
加载中...