uva10034

来源:互联网 发布:java sort 编辑:程序博客网 时间:2024/05/20 07:18
#include <iostream>#include <math.h>#include <algorithm>#include <stdio.h>#include <string.h>using namespace std;struct Node{    double x,y;};Node node[110];int u[110*110];int v[110*110];double w[110*110];int p[110];int r[110*110];int n,m;int cmp(const int i,const int j){    return w[i]<w[j];}int find(int x){    return p[x]==x?x:p[x]=find(p[x]);}double kruskal(){    memset(p,0,sizeof(p));    memset(r,0,sizeof(r));    int x,y,i;    double ans=0;    for(i=1;i<=n;i++) p[i]=i;    for(i=1;i<m;i++) r[i]=i;    sort(r+1,r+m,cmp);    for(i=1;i<m;i++)    {        int e=r[i];        x=find(u[e]);        y=find(v[e]);        if(x!=y)        {            ans+=w[e];            p[x]=y;        }    }    return ans;}int main(){    //freopen("debug\\in.txt","r",stdin);    //freopen("debug\\out.txt","w",stdout);    int cases;cin>>cases;    while(cases--)    {         cin>>n;        for(int i=1;i<=n;i++)            cin>>node[i].x>>node[i].y;            m=1;//这个m带来的bug找了好久……还是要规范写啊,最后m代表的不是边数量了,而是边数量+1!        for(int i=1;i<=n;i++)        for(int j=i+1;j<=n;j++)        {            u[m]=i;            v[m]=j;            double dx=node[i].x-node[j].x;            double dy=node[i].y-node[j].y;            w[m++]=sqrt(dx*dx+dy*dy);        }        if(cases)        printf("%.2lf\n\n",kruskal());        else          printf("%.2lf\n",kruskal());    }    return 0;}/*278-70.2 24.116.8 -12.7-40.7 -78.1-64.6 -83.3-60.9 -60.444.3 66.41.4 -79.5-53.2 46.167.1 75.974.8 -66.070.1 59.691.8 87.1-76.8 -35.987.7 -18.50.3 -24.6-9.3 18.0-96.6 57.863.9 2.815.4 -34.040.8 85.053.7 58.9-65.0 1.8-94.8 -10.1-7.4 -93.4-43.4 74.1-50.4 36.029.6 85.2-78.7 -78.7-1.1 27.0-56.2 95.5-40.0 -36.0-59.6 24.9-88.5 -85.3-4.9 57.60.5 68.546.2 18.610.4 48.1-91.7 -81.180.0 59.281.8 37.3-40.5 0.517.6 -85.151.4 -3.027.4 57.4-38.2 24.775.4 -89.1-47.6 7.7-10.2 -88.3-27.5 -61.9-29.4 -38.6-47.9 95.2-63.9 -27.2-30.2 -69.58.3 29.110.8 19.8-7.8 7.482.3 -29.5-54.6 94.0-60.4 -69.140.5 62.3-13.6 13.018.2 13.0-95.9 28.311.5 -3.6-80.1 81.158.2 -76.11.6 -12.6-92.3 -46.0-81.2 -26.3-83.6 32.0-48.7 53.4-54.9 41.4-31.3 27.655.2 -89.166.1 77.7-81.9 17.584.1 91.1-2.9 -3.0272.1 42.5-34.6 38.0-74.8 63.785.6 -77.857.3 -12.2-18.3 -67.9-83.4 91.3-68.4 -95.752.8 83.799.2 -66.6-92.3 26.3-51.2 -72.88.2 25.038.8 31.743.1 -41.6-49.7 74.0-17.6 73.9-53.6 63.4-13.7 -46.120.4 72.227.9 -24.1-2.3 -59.497.4 71.2-47.8 -65.22.8 -97.218.4 -85.4-13.3 72.8*/
原创粉丝点击