POJ
来源:互联网 发布:mac上装ios模拟器 编辑:程序博客网 时间:2024/06/01 10:44
贴模板
有卫星的两个点之间随意通信。没有卫星的点之间距离不超过D可以通信。求最小D。
没有卫星的情况下,用kruskal建一课最小生成树时,会对边进行排序。这时边的最大值就是答案。有卫星的情况下,让距离最大的点拥有卫星,s个卫星使用了s-1个边。第 总边数减去s-1 个边就是要求的最小D。
#include <stdio.h>#include <string.h>#include <iostream>#include<algorithm>#include <vector>#include <queue>#include <string>#include <math.h>#include <stdlib.h>using namespace std;#define INF 0x3f3f3f3f#define mem(arr,a) memset(arr,a,sizeof(arr))#define V 1000+5#define LL long long int#define E 320000#define pow(a) ((a)*(a))struct node{ int x, y;};struct edge{ int u, v;double w;};bool cmp(edge a, edge b){ return a.w < b.w;}edge es[E];node vet[V];int t, s, n;int par[V];int cnt = 0;int find(int x){ if (x == par[x])return par[x]; return par[x] = find(par[x]);}void kruskal(){ sort(es, es + cnt, cmp); int c = 0; for (int i = 0; i < cnt; i++){ edge e = es[i]; int a = find(e.u); int b = find(e.v); if (a != b){ par[a] = b; c++; if (c == n - s){ printf("%.2f\n", e.w); return; } } }}int main(){ cin >> t; while (t--){ cin >> s >> n; for (int i = 1; i <= n; i++)par[i] = i; cnt = 0; for (int i = 1; i <= n; i++){ cin >> vet[i].x >> vet[i].y; } for (int i = 1; i <= n; i++){ for (int j = 1; j < i; j++){ es[cnt].u = i; es[cnt].v = j; es[cnt++].w = sqrt(pow(vet[i].x - vet[j].x) + pow(vet[i].y - vet[j].y)); } } kruskal(); }}
阅读全文
0 0
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- codeforces 851 B. Arpa and an exam about geometry
- 浏览器打开一个网站可能经历哪些步骤
- Elasticsearch之—— 5.X head插件安装实例
- com.android.dx.cf.iface.ParseException
- python用类实现栈
- POJ
- QSS样式表
- 生产者/消费者的示例程序,生产者随机地产生若干个整数,消费者将这些整数输出到屏幕。
- PAT 1080. Graduate Admission (30) 已通过
- 题目24-素数距离问题
- 170905_个人机器学习初步计划
- 显示mac上隐藏的资源库文件方法
- 彻底理解样本方差为何除以n-1
- python os 模块常用命令