kruskal 50分RE求助
查看原帖
kruskal 50分RE求助
638832
XXCCVV楼主2023/4/12 13:56
#include<algorithm>
#include<iostream>
#include<iomanip>
#include<cstring>
#include<vector>
#include<cmath>
#include<stack>
#include<queue>
#include<map>
#include<set>

#define MAXN 10005
#define MAXNN 1000005

using namespace std;

struct node {
	int x;
	int y;
	int v;
}edge[MAXNN];

int n,m,edge_cnt=0,ans,cnt;
int fa[MAXN];

bool cmp(node x,node y){
	if(x.v>y.v){
		return 0;
	}else{
		return 1;
	}
}

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

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

int main() {
	cin>>n;
	m=n*n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			int x;
			cin>>x;
			if(x){
				edge_cnt++;
				edge[edge_cnt].x=i;
				edge[edge_cnt].y=j;
				edge[edge_cnt].v=x;
			}
		}
	}
	for(int i=1;i<=n;i++){
		fa[i]=i;
	}
	sort(edge+1,edge+1+m,cmp);
	for(int i=1;i<=m;i++){
		int xx=find(edge[i].x);
		int yy=find(edge[i].y);
		if(xx==yy){
			;
		}else{
			unionn(edge[i].x,edge[i].y);
			ans+=edge[i].v;
			cnt++;
			if(cnt==n-1){
				break;
			}
		}
	}
	cout<<ans;
	return 0;
}

2023/4/12 13:56
加载中...