1 条题解

  • 2
    @ 2022-10-23 15:20:38
    #include<iostream>
    #include<fstream>
    #include<iomanip>
    #include<stdio.h>
    #include<cstdio>
    #include<math.h>
    #include<cmath>
    #include<algorithm>
    #include<string>
    #include<cstring>
    #include<string.h>
    #include<vector>
    #include<stack>
    #include<queue>
    #include<map>
    #include<set>
    #include<cstdlib>
    #include<stdlib.h>
    #include<ctime>
    #include<time.h>
    using namespace std;
    #define LL long long
    const int N=1e5+5;
    const int INF=0x3f3f3f3f;
    int T,n,m,cnt,num;
    double ans;
    int xx[1100],yy[1100];
    int fa[1100];
    struct node{
    	int x,y;
    	double z;
    }edg[6001000];
    int find(int x){
    	return fa[x]==x?x:fa[x]=find(fa[x]);
    }
    bool cmp(node a,node b){
    	return a.z<b.z;
    }
    void init(){
    	num=1;
    	for(int i=1;i<=m;i++){
    		for(int j=1;j<=m;j++){
    			if(i==j){
    				continue;
    			}
    			edg[num].x=i;
    			edg[num].y=j;
    			edg[num].z=sqrt(1.0*pow(xx[i]-xx[j],2)+pow(yy[i]-yy[j],2));
    			num++;
    		}
    	}
    	num--;
    	sort(edg+1,edg+num+1,cmp);
    	for(int i=1;i<=m;i++){
    		fa[i]=i;
    	}
    }
    void kruskal(){
    	int xx,yy;
    	for(int i=1;i<=num;i++){
    		xx=find(edg[i].x);
    		yy=find(edg[i].y);
    		if(xx!=yy){
    			cnt++;
    			fa[xx]=yy;
    			ans=edg[i].z;
    		}
    		if(cnt==m-n){
    			break;
    		}
    	}
    }
    int main(){
    	/*
    	freopen(".in","r",stdin);
    	freopen(".out","w",stdout);
    	*/
    	cin>>T;
    	while(T--){
    		memset(edg,0,sizeof(edg));
    		cin>>n>>m;
    		cnt=0;
    		for(int i=1;i<=m;i++){
    			cin>>xx[i]>>yy[i];
    		}
    		init();
    		kruskal();
    		cout<<fixed<<setprecision(2)<<ans<<endl;
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    297
    时间
    1000ms
    内存
    128MiB
    难度
    5
    标签
    递交数
    65
    已通过
    23
    上传者