1 条题解

  • 0
    @ 2026-6-14 16:25:28

    #include<bits/stdc++.h>
    using namespace std;
    const int N=510;
    struct edge{int x,y;double c;}e[N*N],s[N];int elen;
    int n,m,fa[N];
    double dist(int X1,int Y1,int X2,int Y2)
    {
        double x=(double)(X1-X2);
        double y=(double)(Y1-Y2);
        return sqrt(x*x+y*y);
    }
    bool cmp(edge n1,edge n2){return n1.c<n2.c;}
    int findfa(int x){return fa[x]==x?x:fa[x]=findfa(fa[x]);}
    double kruskal()
    {
        sort(e+1,e+1+elen,cmp);
        for(int i=1;i<=n;i++)fa[i]=i;
        int t=0;double ans=0;
        for(int i=1;i<=elen;i++)
    	{
            int tx=findfa(e[i].x),ty=findfa(e[i].y);
            if(tx!=ty)
    		{
                fa[tx]=ty;
                if(++t==n-1-(m-1))
    			{
                    ans=e[i].c;
                    break;
                }
            }
        }
        return ans;
    }
    int main()
    {
    
            scanf("%d%d",&m,&n);elen=0;
            for(int i=1;i<=n;i++)scanf("%d%d",&s[i].x,&s[i].y);
            for(int i=1;i<=n;i++)    
                for(int j=i+1;j<=n;j++)
    			{
                    double d=dist(s[i].x,s[i].y,s[j].x,s[j].y);
                    e[++elen]={i,j,d};
                }
            printf("%.2f\n",kruskal());
     
        return 0;
    }
    
    
    • 1

    D139【最小生成树】无线通讯网

    信息

    ID
    1476
    时间
    1000ms
    内存
    64MiB
    难度
    7
    标签
    递交数
    151
    已通过
    37
    上传者