kruskal 0分求助
  • 板块P2820 局域网
  • 楼主XXCCVV
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/9/21 13:52
  • 上次更新2023/11/2 18:53:51
查看原帖
kruskal 0分求助
638832
XXCCVV楼主2023/9/21 13:52
#include<algorithm>
#include<iostream>
#include<iomanip>
#include<cstring>
#include<vector>
#include<cmath>
#include<stack>
#include<queue>
#include<map>
#include<set>
using namespace std;

struct edge{
	int st,to,w;
}edges[1005];

int n,k,ans,cnt;
int fa[105];

bool cmp(edge a,edge b){
	return a.w<b.w;
}

int find_(int gu){
	if(fa[gu]==gu){
		return gu;
	}else{
		return fa[gu]=find_(fa[gu]);
	}
}

void add(int x,int y){
	int xx=find_(x);
	int yy=find_(y);
	fa[xx]=yy;
}

int main(){
	cin>>n>>k;
	for(int i=1;i<=k;i++){
		cin>>edges[i].st>>edges[i].to>>edges[i].w;
		ans+=edges[i].w;
	}
	for(int i=1;i<=n;i++){
		fa[i]=i;
	}
	sort(edges+1,edges+1+n,cmp);
	for(int i=1;i<=k;i++){
		if(find_(edges[i].st)!=find_(edges[i].to)){
			add(edges[i].st,edges[i].to);
			ans-=edges[i].w;
			cnt++;
		}
		if(cnt==n-1){
			cout<<ans;
			return 0;
		}
	}
	return 0;
}

2023/9/21 13:52
加载中...