题意: 给你N 个球,如果两个球球有重叠部分的话就称这两个球是联通的 ,如果两个球不想交,可以在他们之间建立一个桥梁,使其联通,问最少需要建多少长度的桥梁才能是全部的球联通。
分析: 图建好后就是最小生成树问题。
View Code
#include#include #include #include int u[5005],v[5005],f[103],r[5005];double w[5005];int cmp(const void*p1,const void*p2){ return w[*(int*)p1]>w[*(int*)p2]?1:-1;}struct node{ double x,y,z,r;}q[102];int find(int x){ return f[x]==x?x:(f[x]=find(f[x]));}void join(int x,int y){ int fx=find(x); int fy=find(y); if(fx!=fy) { if(fx