克鲁斯卡尔只得了20分求助QAQ
查看原帖
克鲁斯卡尔只得了20分求助QAQ
112211
拜____仁楼主2020/10/5 09:55

如题 以下是代码


#include<bits/stdc++.h>
using namespace std;
long long int n,m,father[1000001],k,tot;
struct edgee{
	int x,y,z;
}f[1000001];
bool cmp(edgee a,edgee b)
{
	return a.z<b.z;
}
int find(int x)
{
	if(father[x]!=x)
		father[x]=find(father[x]);
	return father[x];
}
int unionn(int x,int y)
{
	return father[y]=x;
}
void kruskal()
{
	sort(f+1,f+m+1,cmp);
	for(register int i=1;i<=m;i++)
	{
		int a=f[i].x;
		int b=f[i].y;
		int w=f[i].z;
		if(find(a)!=find(b))
		{
			unionn(a,b);
			tot+=w;
			k++;
		}
	}
}
int main()
{
	cin>>n>>m;
	for(register int i=1;i<=m;i++)
	{
		cin>>f[i].x>>f[i].y>>f[i].z;
		father[i]=i;
	}
	kruskal();
	if(k<n-1)
		cout<<"orz"<<endl;
	else cout<<tot<<endl;
	return 0;	
}

2020/10/5 09:55
加载中...