分析:裸mst,排序小于号打成大于号导致我AC率下降了1%啊啊!!!!!
#include<cstdio>
#include<cstring>
#include<algorithm>
//#include<cmath>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
typedef long long ll;
const int N=3e5+5;
struct node
{
int x,y;
}a[N];
struct data
{
int x,y;
ll z;
}e[4000050];
int n,m;
inline ll cal(int i,int j)
{
return (a[i].x-a[j].x)*(a[i].x-a[j].x)+
(a[i].y-a[j].y)*(a[i].y-a[j].y);
}
int f[N];
bool cmp(data a,data b)
{
return a.z<b.z;
}
inline int get(int x)
{
if (f[x]==x)return x;
else return f[x]=get(f[x]);
}
int main()
{
ll lim;
scanf("%d%lld",&n,&lim);
fo(i,1,n)
{
scanf("%d%d",&a[i].x,&a[i].y);
}
int cnt=0;
fo(i,1,n-1)
fo(j,i+1,n)
{
ll z=cal(i,j);
if (z<lim)continue;
e[++cnt].x=i,e[cnt].y=j,e[cnt].z=z;
e[++cnt].x=j,e[cnt].y=i,e[cnt].z=z;
}
fo(i,1,n)f[i]=i;
int count=0;
ll ans=0;
sort(e+1,e+1+cnt,cmp);
fo(i,1,cnt)
{
int fx=get(e[i].x),fy=get(e[i].y);
if (fx!=fy)
{
count++;
f[fx]=fy;
ans+=e[i].z;
if (count==n-1)break;
}
}
if (count!=n-1)printf("-1");
else printf("%lld\n",ans);
}