HDU 4663 —— Outlets(最小生成树)
来源:互联网 发布:python量化投资入门 编辑:程序博客网 时间:2024/06/05 11:16
题目:Outlets
题意:给定N个点,要将N个点用线段连接起来,其中给定的p,q两点必须用一条线段连接,要求在此限制下的最小生成树。
点个数也不多,纯粹当最小生成树算法练习。
#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;const int N = 60;int n, p, q, x[N], y[N];double dist[N][N];double cal(double dx,double dy){ return sqrt(dx*dx + dy*dy);}bool done[N];double d[N];double solve(){ memset(done,0,sizeof(done)); double res = dist[p][q]; done[p]=done[q]=1; for(int i=1; i<=n; i++){ d[i] = min(dist[p][i], dist[q][i]); } for(int i=3; i<=n; i++){ int j=-1; for(int k=1; k<=n; k++){ if(done[k]) continue; if(j==-1 || d[k]<d[j]) j=k; } done[j]=1; res += d[j]; for(int k=1; k<=n; k++){ if(!done[k]) d[k] = min(d[k], dist[j][k]); } } return res;}int main(){ while(~scanf("%d", &n) && n){ scanf("%d %d", &p, &q); for(int i=1; i<=n; i++){ scanf("%d %d", x+i, y+i); for(int j=1; j<i; j++){ dist[i][j] = dist[j][i] = cal(x[i]-x[j], y[i]-y[j]); } dist[i][i]=0.0; } printf("%.2lf\n", solve()); } return 0;}
0 0
- HDU 4663 —— Outlets(最小生成树)
- hdu 4463 Outlets (最小生成树)
- HDU 4463 Outlets(最小生成树)
- Outlets(最小生成树)
- hdu 4463 Outlets(图论:最小生成树)
- HDU-4463-Outlets -最小生成树
- HDU 4463 Outlets 最小生成树
- HDU 4463 Outlets (Kruskal 最小生成树)
- hdu 4463 Outlets(最小生成树)
- hdu 4463 Outlets(最小生成树)
- HDU 4463Outlets 最小生成树Kr~
- hdu 4463 Outlets 最小生成树
- hdu 4463 Outlets【最小生成树】水题
- Outlets 最小生成树
- hdu 4463 Outlets(最小生成树,kruskal,前向星)
- hdu4463 Outlets 最小生成树
- HDOJ 4463 Outlets(最小生成树--prime)
- hdu4463 Outlets(必含某条边的最小生成树)
- [Leetcode] Postorder Traverse of Binary Tree
- TopCoder-ChessMetric
- [053] 微信公众平台开发教程第23篇-SAE不支持XStream框架的解决方案
- Tabel Widget使用
- android中实现毛笔效果(View 中绘图)
- HDU 4663 —— Outlets(最小生成树)
- hdu 4627 动态规划
- 风格的风格和弱覆盖问题沃尔
- 个人个人特人头请我人情味儿为
- hdu 4982 Goffi and Squary Partition (想法题)
- Http、socket和TCP/IP
- 认同和人体一日游我人情味
- Java各阶段学习书目
- 链表的删除,插入,合并