Poj-2031 最小生成树+几何
来源:互联网 发布:ubuntu 16.04 代理 编辑:程序博客网 时间:2024/06/05 11:54
用最短距离使几个球联通,最小生成树,两点距离为几何知识。
#include<cstdio>#include<algorithm>#include<iostream>#include<cmath>using namespace std;struct edge{ int x,y; double v;}e[20000];int fa[200],am[200];double ans;struct circle{ double x,y,z,dis;}c[200];int len,n;void init(){ for(int i=0;i<n;i++) { fa[i] = i; am[i] = 1; }}int cmp(edge a,edge b){ return a.v<b.v;}int toGetFarther(int a){ while(fa[a]!=a) a = fa[a]; return a;}void unin(int a,int b,int z){ int faA = toGetFarther(a),faB = toGetFarther(b); if(fa[faA]!=fa[faB]) { if(am[faA]>am[faB]){am[faA]+=am[faB];fa[faB] = faA;} else {am[faB]+=am[faA];fa[faA] = faB;} ans+=e[z].v; }}double Kruskal(){ ans = 0.0; for(int i=0;i<len;i++) unin(e[i].x,e[i].y,i); return ans;}int main(){ while(scanf("%d",&n)&&n) { init(); len = 0; for(int i=0;i<n;i++) scanf("%lf%lf%lf%lf",&c[i].x,&c[i].y,&c[i].z,&c[i].dis); for(int i=0;i<n;i++) for(int j=i+1;j<n;j++) { e[len].x = i; e[len].y = j; double dist = sqrt(pow(c[i].x-c[j].x,2.0)+pow(c[i].y-c[j].y,2.0)+pow(c[i].z-c[j].z,2.0))-(c[i].dis+c[j].dis); if(dist>=0)e[len].v = dist; else e[len].v = 0.0; len ++; } sort(e,e+len,cmp); printf("%.3f\n",Kruskal()); } return 0;}
0 0
- Poj-2031 最小生成树+几何
- poj j2031(几何+最小生成树)
- poj 2031 Building a Space Station(计算几何+最小生成树)
- POJ 2031 Building a Space Station 简单计算几何 + 最小生成树
- POJ 2031 (最小生成树)
- poj 2031 最小生成树(prim)
- POJ 2031 最小生成树Kruskal算法
- POJ 2031 (最小生成树)
- poj 最小生成树1258
- POJ 1258 最小生成树
- 最小生成树 poj 2485
- POJ-1258 最小生成树
- poj 1751 最小生成树
- poj 2421(最小生成树)
- poj 1789(最小生成树)
- poj 2349(最小生成树)
- poj 1861 最小生成树
- POJ 1679 最小生成树
- Android开发之旅:组件生命周期(一)出处:http://www.cnblogs.com/skynet/
- 存储器的保护(二)——《x86汇编语言:从实模式到保护模式》读书笔记19
- 文件的读取(代码示例)
- C++面向对象编程<十三>:template和reference
- UVA 607 Scheduling Lectures
- Poj-2031 最小生成树+几何
- 【牛客网】【搜狐2016研发工程师编程题】【最大上升子序列】
- ajax 实现 JavaScript与jsp数据的传递
- java知识结构树
- 大型数据库技术1
- 欢迎使用CSDN-markdown编辑器
- HDU1532 - Drainage Ditches(网络流)
- scala 学习第二章 函数
- C++实现复数计算