(发现没有加注释……)
```cpp
#include<cstdio>
#include<algorithm>
#include<cmath>
#define MAXP 501
#define reg register
using namespace std;
struct info
{
int p_b;
int p_e;
double dis;
}line[MAXP*MAXP];
int px[MAXP],py[MAXP],fa[MAXP];
int ptr=0;
int n,p;
inline bool cmp(info a,info b)
{return(a.dis<b.dis);}
inline double pdis(int p,int pit)
{return(sqrt((px[p]-px[pit])*(px[p]-px[pit])+(py[p]-py[pit])*(py[p]-py[pit])));}//计算距离
int find(int ptr)
{
if(fa[ptr]==ptr)
return(ptr);
return(fa[ptr]=find(ptr));
}
inline void addline(int op,int ed,double dist)
{
line[++ptr].p_b=op;
line[ptr].p_e=ed;
line[ptr].dis=dist;
return;
}//连边
int main()
{
scanf("%d %d",&p,&n);
if(p==1)
p=0;
double ans=0;
for(reg int i=1;i<=n;i++)
{
fa[i]=i;
scanf("%d %d",&px[i],&py[i]);
for(reg int j=1;j<i;j++)
{
double dist=pdis(i,j);
addline(i,j,dist);
}//连边
}
sort(line+1,line+1+ptr,cmp);//kruskal主部分
for(reg int i=1;i<=ptr;i++)
{
int f_b=find(line[i].p_b);
int f_e=find(line[i].p_e);
if(f_b!=f_e)
{
p++;
ans=max(ans,line[i].dis);
fa[f_b]=f_e;
if(p==n)
break;
}
}
printf("%.2lf",ans);
return(0);
}
```
by 未见堇开 @ 2018-09-07 20:13:14
@[Redspirit](/space/show?uid=14854) “您不能查看该用户的做题纪律”
by wxy_god @ 2018-09-07 20:15:09
并查集find函数写错了
by fdszlzl @ 2018-09-07 20:20:57
改了一下设置,现在应该能看记录了。
又看了一下自己写的并查集模板,果然是错在find上XD。
谢谢dalao们,我AC了。
https://www.luogu.org/recordnew/show/10541897
by 未见堇开 @ 2018-09-07 21:17:01