kruskal 10分求助
查看原帖
kruskal 10分求助
179835
Super_Bill楼主2020/11/6 22:31
#include<bits/stdc++.h>
using namespace std;
int n,m,head[5005],k,f[5005],ans,cnt;
struct edge
{
	int next,to,dis;	
}e[200005];
int find(int x)
{
	while (x!=f[x]) x=f[x]=f[f[x]];
	return x;
}
int cmp(edge x,edge y)
{
	return x.dis<y.dis;
}
void kruskal()
{
	sort(e+1,e+m+1,cmp);
	for (int i=1;i<=m;++i)
	{
		int u=e[i].next,v=e[i].to;
		if (find(u)==find(v)) continue;
		ans+=e[i].dis;
		f[u]=v;
		if (++cnt==n-1) break;
	}
}
int main()
{
	cin>>n>>m; 
	for (int i=1;i<=m;++i)
	{
		cin>>e[i].next>>e[i].to>>e[i].dis;
	}
	for (int i=1;i<=n;++i) f[i]=i;
	kruskal();
	cout<<ans<<endl;
	return 0;
}
2020/11/6 22:31
加载中...