40分,最后3个点RE???
查看原帖
40分,最后3个点RE???
342873
有趣的问题楼主2020/9/25 20:03
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int n,m,fa[10005],k=0,sq1[10005],sq2[10005];double ans=0,s;
int find(int x){
	int cc;
	do{
		cc=fa[x];
		if(fa[x]!=x)
	    fa[x]=find(fa[x]);
}while(cc!=fa[x]);
	return fa[x];
}
struct stu{
	int a,b;double c;
}st[10005];
bool cmp(stu x,stu y){
	return x.c<y.c;
}
void krus(){
	for(int i=1;i<=n;i++){
		//cout<<st[i].a<<' '<<st[i].b<<' '<<st[i].c<<endl;
		if(k==n-s)break;
		if(find(st[i].a)!=find(st[i].b)){
			//cout<<"QQQ"; 
			fa[find(st[i].a)]=find(st[i].b);
			ans+=st[i].c;
			k++;
		}
	}
}
int main(){
	cin>>s>>n;
	m=1;
	for(int i=1;i<=n;i++){
	    int xx,yy;
		cin>>xx>>yy;
		sq1[i]=xx;sq2[i]=yy;
		for(int j=1;j<i;j++){
			if(i!=j){
				st[m].a=j;
				st[m].b=i;
				st[m].c=sqrt((sq1[i]-sq1[j])*(sq1[i]-sq1[j])+(sq2[i]-sq2[j])*(sq2[i]-sq2[j]));
				m++;
			}
		}	
	}
	for(int i=1;i<=n;i++)
	fa[i]=i;
	sort(st,st+m,cmp);
	krus();
	//cout<<k<<endl;
	printf("%.2lf",st[k].c);
	return 0;
} 
2020/9/25 20:03
加载中...