P4047 [JSOI2010]部落划分 问一下为什么会MLE
查看原帖
P4047 [JSOI2010]部落划分 问一下为什么会MLE
220103
1245634a楼主2020/7/30 10:50
#include<bits/stdc++.h>
using namespace std;
#define maxn 1010
#define f(x) (x)*(x)
struct point{
	int x,y;
}; 
point A[maxn];
struct edg{
	int a,b,l;
};
edg B[maxn*maxn];
bool cmp(edg a,edg b){
	return a.l<b.l;
}
int pos,lst,n,m;
int fa[maxn];
int find(int x){
	if(fa[x]==0)return x;
	fa[x]=find(fa[x]);
	return fa[x];
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
    	scanf("%d%d",&A[i].x,&A[i].y);
    	for(int j=1;j<i;j++){
    		B[++lst]=(edg){i,j,f(A[i].x-A[j].x)+f(A[i].y-A[j].y)};
		}
	}
	int cnt=n;
	sort(B+1,B+lst+1,cmp);
	for(int i=1;i<=lst;i++){
		int ga=find(B[i].a),gb(B[i].b);
		if(ga!=gb){
			cnt--;
			fa[ga]=gb;
			if(cnt==m){
				pos=i+1;
				break;
			}
		}
	}
	while(find(B[pos].a)==find(B[pos].b))pos++;
	printf("%.2lf",sqrt(B[pos].l));
	return 0;
}
2020/7/30 10:50
加载中...