kruscal 70分求助
查看原帖
kruscal 70分求助
232507
OK咯莫名其妙楼主2021/7/6 19:11
#include<bits/stdc++.h>
using namespace std;
struct node{
	int u,v;
	double w;
}edge[10005];
int n,k,num,flag,f;
int a[10005],b[10005],fa[300005];
int find(int a)
{
	if(fa[a]!=a)
		fa[a] = find(fa[a]);
	return fa[a];
}
void unionn(int a,int b){
	fa[find(b)]=find(a);
}
double qiu(int i,int j){
	return sqrt(pow((a[i]-a[j]),2)+pow((b[i]-b[j]),2));
}
int cmp(node a1,node b1){
	return a1.w<b1.w;
}
void kruscal(){
	for(int i=1;i<=f;i++){
		if(num==n-k)
		{
		flag=1;
		//cout<<1<<endl;
		}
		if(find(edge[i].u)!=find(edge[i].v)){
			num++;
			unionn(edge[i].u,edge[i].v);
			if(flag){
			printf("%.2lf",edge[i].w);
			return ;
			}
			
		}
	}
}
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i]>>b[i];	
	}
	f=0;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=i;j++){
			if(i!=j){
			edge[++f].u=i,edge[f].v=j,edge[f].w=qiu(i,j);
			//cout<<f<<" "<<edge[f].w<<endl;
			}
		}
	for(int i=1;i<=n;i++)
    	fa[i] = i;
	sort(edge+1,edge+f+1,cmp);
	/*for(int i=1;i<=f;i++)
	cout<<edge[i].w<<" ";
	cout<<endl;*/
	kruscal();
	//cout<<f<<endl;
	return 0;		
}
2021/7/6 19:11
加载中...