求助
查看原帖
求助
420129
Nt_Tsumiki楼主2021/7/14 09:34

只有60pts

#include <algorithm>
#include <iostream>
#include <stdio.h>
#include <cmath>

using namespace std;
int n,m,f[1000001],tmp;
double ans;
int x[1000001],y[1000001];

struct Node{
    int xx,yy;
    double val;
}a[1000001];

bool cmp(Node a,Node b){
	if (a.val==b.val) {
		return a.xx<b.xx;
    }
	return a.val<b.val;	
}

double valun(int m,int n) {
	return double(sqrt(double((x[m]-x[n])*(x[m]-x[n]))+double((y[m]-y[n])*(y[m]-y[n]))));
}

int find(int x) {
    if (f[x]==x) {
        return x;
    }
    return f[x]=find(f[x]);
}

int main() {
    cin>>n>>m;
    for (int i=1;i<=n;i++) {
        cin>>x[i]>>y[i];
    }
    for (int i=1;i<=n;i++) {
        f[i]=i;
    }
    for (int i=1;i<=n;i++) {
        for (int j=i+1;j<=n;j++) {
            a[++tmp].xx=i;
            a[tmp].yy=j;
            a[tmp].val=valun(i,j);
        }
    }
    for (int i=1;i<=m;i++) {
        int A,B;
        cin>>A>>B;
        a[++tmp].xx=A;
        a[tmp].yy=B;
        a[tmp].val=0;
    }
    sort(a+1,a+tmp+1,cmp);
    for (int i=1;i<=tmp;i++) {
        int nx=find(a[i].xx);
        int ny=find(a[i].yy);
        if (nx!=ny) {
            f[nx]=ny;
            ans+=a[i].val;
        }
    }
    printf("%.2lf",ans);
    return 0;
}
2021/7/14 09:34
加载中...