为啥16分啊
查看原帖
为啥16分啊
492281
longerfu楼主2024/4/13 22:07
#include <iostream>
#include <algorithm>
using namespace std; 
int  fa[10005];
struct edge{
	int u,v,w;
}e[500001];
int m,n;
bool cmp(edge x,edge y)
{
	return x.w <y.w;
}
int find(int x)
{
	return fa[x] == x ? x : fa[x] = find(fa[x]);
}
bool merge(int a,int b)
{
	int p = find(a);
	int q = find(b);
//	cout<<a<<" "<<b<<endl;;
	if(p==q) return 0;
	fa[q] = p;
	return 1;	
} 
int Kruskal()
{
	int ans=0;
	sort(e+1,e+m+1,cmp);
	for(int i=1;i<=m;i++)
	{
		if(merge(e[i].u,e[i].v))
		{
			ans+=e[i].w;
			n--;
			if(n==1) return ans;
		}
	}
	return 0;
}
int main()
{
	cin>>m>>n;
	for(int i=1;i<=n;i++)
	{
		fa[i] = i;
	}
	for(int i=1;i<=m;i++)
		cin>>e[i].u>>e[i].v>>e[i].w;
	if(!Kruskal()) cout<<"orz"; 
	else 	cout<<Kruskal();
	return 0;
}
2024/4/13 22:07
加载中...