求助,为何这份代码厌氧
查看原帖
求助,为何这份代码厌氧
389729
BantM楼主2022/7/27 20:39

克鲁斯卡尔算法

不开O2 AC

开O2 全部RE

#include<bits/stdc++.h>
using namespace std;
int fa[1000100];
int n,m;
struct Node {
	int x;
	int y;
	int z;
}node[1000100];

inline void start(){
	for(int i=1;i<=n;i++){
		fa[i]=i;
	}
}

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

int hb(int a,int b){
	fa[find(a)]=find(b);
}

bool cmp(Node a,Node b){
	return a.z<b.z; 
}

int main(){
	int mst=0;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>node[i].x>>node[i].y>>node[i].z; 
	}
	sort(node+1,node+m+1,cmp);
	start();
	/*
	for(int i=1;i<=m;i++){
		cout<<node[i].x<<" "<<node[i].y<<" "<<node[i].z<<endl;
	}
	*/
	for(int i=1;i<=m;i++){
		int f1=find(node[i].x);
		int f2=find(node[i].y);
		if(f1==f2){
			continue;
		}
		else{
			hb(f1,f2);
			mst+=node[i].z;
		}
	}
	for(int i=1;i<=n;i++){
		if(find(1)!=find(i)){
			cout<<"orz";
			return 0;
		}
		else{
			continue;
		}
	}
	
	cout<<mst<<endl;
	return 0;
}
2022/7/27 20:39
加载中...