kruskal求助qwq
查看原帖
kruskal求助qwq
93731
闻染楼主2020/11/6 21:31
#include <bits/stdc++.h>
using namespace std;

#define RE register
#define INF 2147483647
#define maxn 10010
#define ll long long

ll n,m,ans=0,fa[5001],k;

struct node{
	ll a,b,c;
}f[5001];

inline bool cmp(node x,node y){
	return x.c>y.c;
}

inline void fread(ll &x){
    x=0;
    int f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        ch=getchar();
    }
    if(ch=='-')f=-1,ch=getchar();
    while(ch>='0'&&ch<='9'){
        x=(x<<1)+(x<<3)+(ch^48);
        ch=getchar();
    } 
    x*=f;
}

inline ll fat(ll x){
	if(fa[x]==x)return fa[x];
	fa[x]=fat(fa[x]);
	return fa[x];
}

inline void kus(){
	for(RE int i=1;i<=m;i++){
		int f1=fat(f[i].a);
		int f2=fat(f[i].b);
		if(f1!=f2){
			fa[f2]=f1;
			k++;
			ans+=f[i].c;
			if(k==n-1)return;
		}
	}
}

int main(){
	fread(n);
	fread(m);
	for(RE int i=1;i<=m;i++){
		fread(f[i].a);
		fread(f[i].b);
		fread(f[i].c);
	} 
	sort(f+1,f+1+n,cmp);
	for(int i=1;i<=5001;i++)fa[i]=i;
	kus();
	printf("%d",ans);
	return 0;
} 
2020/11/6 21:31
加载中...