博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uva 10034
阅读量:4512 次
发布时间:2019-06-08

本文共 1067 字,大约阅读时间需要 3 分钟。

计算所有点之间的权值   然后就是最小生成树 

#include
#include
#include
#include
#include
#include
#include
using namespace std;struct point{ double x,y;};struct edge{ int u,v; double w; void f(int i, int j, double k) { u = i; v = j; w = k; } bool operator < (const edge &a) const { return w < a.w; }};edge e[10001];point p[101];int f[101];int n, l;int find2(int x){ return f[x] == x ? x : f[x] = find2(f[x]);}double solve(){ for(int i = 0; i < n; i++) f[i] = i; double s = 0; for(int i = 0; i < l; i++) { int a = find2(e[i].u), b = find2(e[i].v); if(a != b) { f[a] = b; s += e[i].w; } } return s;}int main(){ int t; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i = 0; i < n; i++) { scanf("%lf%lf",&p[i].x,&p[i].y); } l = 0; for(int i = 0; i < n; i++) for(int j = i+1; j < n; j++) { e[l++].f(i, j, sqrt((p[i].x-p[j].x)*(p[i].x-p[j].x)+(p[i].y-p[j].y)*(p[i].y-p[j].y))); } sort(e,e+l); printf("%.2lf\n",solve()); if(t) puts(""); }}

转载于:https://www.cnblogs.com/avema/p/3774327.html

你可能感兴趣的文章
Generic(泛型)
查看>>
009 如何更好地进行沟通
查看>>
NFC NDEF vcard
查看>>
mininet test
查看>>
OOP
查看>>
找出数组中的重复元素
查看>>
Apache服务器配置
查看>>
ClickOnce清单签名取消后依然读取证书的问题
查看>>
POJ 1083
查看>>
单变量微积分笔记16——定积分的应用1(对数与面积)
查看>>
ACM模板——最短路
查看>>
实验3 分支语句和循环语句(1)
查看>>
JSP页面上添加Fckeditor
查看>>
scrapyd spiderkeeper docker部署
查看>>
Qt教程
查看>>
http://linux-mtd.infradead.org/doc/nand.html nand
查看>>
Verilog语言:还真的是人格分裂的语言
查看>>
BTC全节点搭建
查看>>
mac安装Redis可视化工具-Redis Desktop Manager
查看>>
css3_圆角导航栏(2例)
查看>>