1 条题解
-
2huangchengfu LV 8 @ 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
- 难度
- 6
- 标签
- 递交数
- 63
- 已通过
- 21
- 上传者