uva10397

来源:互联网 发布:软件研发团队口号 编辑:程序博客网 时间:2024/06/08 01:19
#include <iostream>#include <math.h>#include <algorithm>#include <stdio.h>#include <string.h>using namespace std;struct Node{    double x,y;};Node node[800];int u[800*800];int v[800*800];double w[800*800];int p[800];int r[800*800];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(){    int x,y,i;    double ans=0;    for(i=1; i<=n; i++) p[i]=i;    int edge;    int n1,n2;    for(i=1; i<m; i++) r[i]=i;    sort(r+1,r+m,cmp);    scanf("%d",&edge);    for(int i=1; i<=edge; i++)    {        scanf("%d%d",&n1,&n2);        int x=find(n1);        int y=find(n2);        if(x!=y)            p[x]=y;    }    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);    while(~scanf("%d",&n))    {        for(int i=1; i<=n; i++)        {            int x,y;            scanf("%d%d",&x,&y);//不能直接输入到结构体里             node[i].x=x;             node[i].y=y;        }        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);            }        printf("%.2lf\n",kruskal());    }    return 0;}
原创粉丝点击