最小生成树

①Kuskal算法(克鲁斯卡尔)

时间复杂度为O(m log m)

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
struct edge
{
	int u,v,w;
};
edge a[maxn];
bool cmp(edge f1,edge f2)
{
	return f1.w<f2.w;
}
int fa[5010];
int checkk(int k)
{
	if(fa[k]==k)	return k;
	return fa[k]=checkk(fa[k]);
}
int main()
{
	int n,m;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d%d",&a[i].u,&a[i].v,&a[i].w);
	}
	sort(a+1,a+1+m,cmp);
	for(int i=1;i<=n;i++)	fa[i]=i;
	long long ans=0,cnt=n;
	for(int i=1;i<=m;i++)
	{
		if(cnt==1)	break;
		int x=checkk(a[i].u),y=checkk(a[i].v);
		if(x!=y)
		{
			ans+=a[i].w;
			fa[x]=y;
			cnt--;
		}
	}
	printf("%lld\n",ans);
    return 0;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
05-01 13:13
ecece:这么明目张胆虚报就业率啊
点赞 评论 收藏
分享
lllllkin:感觉可以精简到一页简历,有些排版感觉不是必须的。 时间线越早的,你自己越熟悉的放前面。描述可以更精简些,一些问题解决感觉可以不用写具体技术栈,卖个关子,等面试官问。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务