84分求助
查看原帖
84分求助
973480
封禁用户楼主2024/8/8 14:19
#include<bits/stdc++.h>
using namespace std;
struct edge{
	int u;
	int v;
	int w;
};
struct edge e[200001];
int n,m;
int f[200001]={0},sum=0,cnt=0;
void quicksort(int left,int right){
	int i,j;
	struct edge t;
	if(left>right) return;
	i=left;
	j=right;
	while(i!=j){
	    while(e[j].w>=e[left].w&&i<j) j--;
	    while(e[i].w<=e[left].w&&i<j) i++;
	    if(i<j){
	        t=e[i];
	        e[i]=e[j];
	        e[j]=t;
	    }
	}
	t=e[left];
	e[left]=e[i];
	e[i]=t;
	quicksort(left,i-1);
	quicksort(i+1,right);
	return;
}
int getf(int v){
    if(f[v]==v) return v;
    else{
        f[v]=getf(f[v]);
        return f[v];
    }
}
int merge(int v,int u){
    int t1,t2;
    t1=getf(v);
    t2=getf(u);
    if(t1!=t2){
        f[t2]=t1;
        return 1;
    }
    return 0;
}
int main(){
	int i;
	cin >> n >> m;
	for(i=1;i<=m;i++) cin >> e[i].u >> e[i].v >> e[i].w;
	quicksort(1,m);
	for(i=1;i<=n;i++) f[i]=i;
	for(i=1;i<=m;i++){
	    if(merge(e[i].u,e[i].v)){
	        cnt++;
	        sum+=e[i].w;
	    }
	    if(cnt==n-1) break;
	}
	cout << sum;
	return 0;
}
2024/8/8 14:19
加载中...