close
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <queue>
#include <math.h>
#include <algorithm>
using namespace std;
struct edge
{
    int a,b;
    double dis;
    bool operator < (const edge &s2) const
    {
        return dis > s2.dis;
    }
};
struct point
{
    double x,y;
};

point P[105];
int root[105];

int find(int x)
{
    if(x== root[x])return x;
    else return root[x]=find(root[x]);
}
int un (int a,int b)
{
    int ra=find(a);
    int rb=find(b);
    if(ra != rb)
    {
        root[ra]=root[rb];
        return 1;
    }
    return 0;
}
void init ()
{
    for(int i=0; i<105; i++)
    {
        root[i]=i;
    }
}
priority_queue<edge> pq;

int main()
{
    int test=0;
    scanf("%d",&test);
    string str;
    while(test--)
    {
        getchar();
        getline(cin,str);
        int num=0;
        scanf("%d",&num);
        init();
        for(int i=0; i<num; i++)
        {
            scanf("%lf%lf", &P[i].x, &P[i].y);
        }
        int edge_count=0;
        for(int i=0; i<num; i++)
        {
            for(int j=i+1; j<num; j++)
            {
                double len = sqrt(pow(P[i].x - P[j].x, 2) + pow(P[i].y - P[j].y, 2));
                //printf("%f\n",len);
                pq.push( {i,j,len} );
            }
        }
        edge E;
        int num2=0;
        double cost=0;
        while(num2+1<num && !pq.empty())
        {
            E=pq.top();
            pq.pop();
            if(un(E.a,E.b))
            {
                num2++;
                cost+=E.dis;
            }

        }
            printf("%.2f\n\n",cost);
    }

}
#kruskal's 用到sort 和 dependent set
arrow
arrow
    文章標籤
    kruskal
    全站熱搜
    創作者介紹
    創作者 Nate_Tang 的頭像
    Nate_Tang

    Nate - life is tough,but I'm tougher

    Nate_Tang 發表在 痞客邦 留言(0) 人氣()