F**K
查看原帖
F**K
1251774
fanjiayu666楼主2024/8/15 15:53
#include<iostream>
#include<map>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
map<int,int> mp;
struct node{
    int x,y ;
    double z;
}a[200010];
bool cmp(node a,node b){
    return a.z<b.z;
}
int n,m,cnt;
double ans[10010],l[10010][2];
double dist(double a1, double a2, double b1, double b2) { // 两点距离
    return sqrt(pow(fabs(a1 - b1), 2) + pow(fabs(a2 - b2), 2));
}
int f(int x){
    if(mp[x]==x)return x;
    mp[x]=f(mp[x]);
    return mp[x];
}
void marge(int a,int b){
    mp[f(a)]=f(b);
}
int main() {
    int t;
    cin>>t;
    while(t--) {
        cin>>n>>m;
        cnt=0;
        memset(a,0,sizeof(a));
        memset(ans,0,sizeof(ans));
        if(n>=m) {
            cout<<"0.00"<<endl;
            continue;
        }
        for(int i=1;i<=m;i++)mp[i]=i;
        for(int i=1;i<=m;i++){
            cin>>l[i][0]>>l[i][1];
        }
        int cc=0;
        for(int i=1;i<=m;i++) {
            for(int j=i+1;j<=m;j++) {
                double ch=0;
                ch=dist(l[i][0],l[i][1],l[j][0],l[j][1]);
                node tmp;
                tmp.x=i,tmp.y=j,tmp.z=ch;
                a[++cc]=tmp;
            }
        }
        sort(a+1,a+1+cc,cmp);
        for(int i=1;i<=cc;i++){
            if(mp[f(a[i].x)]!=mp[f(a[i].y)]){
                marge(a[i].x,a[i].y);
                ans[++cnt]=a[i].z;
            }
        }
        printf("%.2lf\n",ans[cnt-n+1]);
    }
}

vjudge过了 锣鼓过不了???

2024/8/15 15:53
加载中...