代码40求助

P1991 无线通讯网

```cpp #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<cmath> #include<ctime> #include<queue> #include<string> #include<bitset> #include<cctype> #include<cstdlib> #include<functional> #include<istream> #include<sstream> #include<streambuf> #define ll long long using namespace std; const int N=200000,inf=0x3f3f3f; struct edge { double head,to,w; bool operator < (const edge &x) const { return w<x.w; } }e[N]; int x[N],y[N],f[N],s,p,cnt=0,n=0; double ans=0; //bool cmp(edge a,edge b) //{ // return a.w<b.w; //} double dis(int i,int j) { return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); } int find1(int x) { return f[x]==x?x:f[x]=find1(f[x]); } void Kruskal() { for(int i=1;i<=p;i++) f[i]=i; sort(e+1,e+1+n); for(int i=1;i<=n;i++) { // printf("%d--%d--%.2lf\n",i,cnt,e[i].w); double x=e[i].head,y=e[i].to,z=e[i].w; int tx=find1(x),ty=find1(y); if(tx!=ty) { f[tx]=ty; ans=max(ans,z); cnt++; if(cnt>=p-s) break; } } } int main() { scanf("%d%d",&s,&p); for(int i=1;i<=p;i++) { scanf("%d%d",&x[i],&y[i]); for(int j=1;j<i;j++) { n++; e[n]={i,j,dis(i,j)}; } } Kruskal(); printf("%.2f",ans); return 0; }
by AlexSong @ 2023-08-27 17:19:16


|