uva 10034 Freckles 最小生成树

#include <bits/stdc++.h>
using namespace std;
int n;
double x[105],y[105];
double d[105];
int used[105];
double ma[105][105];
double mst(){
	d[0] = 0.0;
	double ans = 0.0;

	for(int i = 0;i < n;i++){
		double min = DBL_MAX;
		int minn;

		for(int j = 0;j < n;j++){
			if(!used[j] && d[j] < min){
				min = d[j];
				minn = j;
			}
		}
		used[minn] = 1;
		ans += min;
		for(int j = 0;j < n;j++){
			if(!used[j] && d[j] > ma[minn][j]){
				d[j]= ma[minn][j];
			}
		}
	}
	return ans;
}
int main(){
	int t;
	cin >> t;
	while(t--){
		cin >> n;
		for(int i = 0;i < n;i++){
			scanf("%lf%lf",&x[i],&y[i]);
		}		

		for(int i = 0;i < n;i++){
			for(int j = 0;j < n;j++){
				ma[i][j] = sqrt((x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]));
			}
		}

		for(int i = 0;i < n+1;i++){
			d[i] = DBL_MAX;
		}
		memset(used,0,sizeof(used));
		printf("%.2f\n",mst());
		if(t){
			printf("\n");
		}
	}
	return 0;
}

时间: 2024-10-11 06:53:19

uva 10034 Freckles 最小生成树的相关文章

UVA 10034 Freckles 【最小生成树】

题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=975 题意:裸的最小生成树 代码: #include <stdio.h> #include <iostream> #include <string.h> #include <algorithm> #include <math.

UVA 10034 Freckles

MST直接上代码了 #include <map> #include <set> #include <list> #include <cmath> #include <ctime> #include <deque> #include <stack> #include <queue> #include <cctype> #include <cstdio> #include <strin

10034 - Freckles 克鲁斯克尔最小生成树!~

1 /* 2 10034 - Freckles 3 克鲁斯克尔最小生成树!- 4 */ 5 #include<iostream> 6 #include<cstdio> 7 #include<cmath> 8 #include<algorithm> 9 using namespace std; 10 11 struct node{ 12 double x, y; 13 }; 14 15 struct tree{ 16 int u, v; 17 double d

UVa 11354 Bond 最小生成树+LCA倍增

题目来源:UVa 11354 Bond 题意:n个点m条边的图 q次询问 找到一条从s到t的一条边 使所有边的最大危险系数最小 思路:使最大的危险系数尽量小 答案是最小生成树上的边 然后用LCA倍增法记录s和t到他们最近公共祖先的最大值 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 50010; const int INF =

uva 11354 bond 最小生成树

n个城市通过m条无向边连接,回答q个询问,每个询问形式为s,t,要找到一条s到t的路使得这条路上的最大危险系数最小. 还是最小瓶颈路,可是要快速回答每次询问,先求出最小生成树,转化为有根树,即找到s到t的路径上的最大边,在这一过程中倍增查找. 预处理的复杂度为nlogn,每次查询为logn. #include <cstdio> #include <cstring> #include <vector> #include <algorithm> using na

训练指南 UVA - 11354(最小生成树 + 倍增LCA)

layout: post title: 训练指南 UVA - 11354(最小生成树 + 倍增LCA) author: "luowentaoaa" catalog: true mathjax: true tags: - 最小生成树 - LCA - 图论 - 训练指南 Bond UVA - 11354 题意 给你一张无向图,然后有若干组询问,让你输出a->b的最小瓶颈路 题解 先求出最小生成树,然后对这个最小生成树做LCA. #include<bits/stdc++.h>

uva 10034 Problem A: Freckles

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=975 最小生成树. 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <algorithm> 5 #define maxn 1000 6 using na

UVA10034 - Freckles(最小生成树)

UVA10034 - Freckles 题目大意: 给你n个雀斑的位置,每个雀斑看作一个点,问使得这个雀斑相互连通的最短的路径长度,最小生成树的问题. 代码: #include <cstdio> #include <algorithm> #include <cmath> using namespace std; const int maxn = 105; double X[maxn], Y[maxn]; int p[maxn]; void init (int n) {

题目1144:Freckles(最小生成树进阶)

题目链接:http://ac.jobdu.com/problem.php?pid=1144 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: // // 1144 Freckles.cpp // Jobdu // // Created by PengFei_Zheng on 18/04/2017. // Copyright © 2017 PengFei_Zheng. All rights reserved. // #include <s