1 /*
 2     The first line of each test case contains 1 <= S <= 100, the number of satellite channels!
 3     注意:S表示一共有多少个卫星,那么就是有 最多有S-1个通道! 然后将最小生成树中的后边的 S-1通道去掉就行了!
 4     思路:最小生成树中的第 k 个最小边!
 5 */
 6 //克鲁斯克尔算法.....
 7 #include<iostream>
 8 #include<cstdio>
 9 #include<cstring>
10 #include<algorithm>
11 #include<cmath>
12 using namespace std;
13
14 double x[800], y[800];
15
16 struct node{
17    int u, v;
18    double d;
19 };
20
21 bool cmp(node a, node b){
22     return a.d < b.d;
23 }
24
25 int f[505];
26
27 node nd[150000];
28 double ret[505];
29
30 int getFather(int x){
31    return x==f[x] ? x : f[x]=getFather(f[x]);
32 }
33
34 bool Union(int a, int b){
35    int fa=getFather(a), fb=getFather(b);
36    if(fa!=fb){
37        f[fa]=fb;
38        return true;
39    }
40    return false;
41 }
42
43 int main(){
44    int n, m;
45    int t;
46    scanf("%d", &t);
47    while(t--){
48           scanf("%d%d", &m, &n);
49        for(int i=1; i<=n; ++i){
50           scanf("%lf%lf", &x[i], &y[i]);
51           f[i]=i;
52        }
53        int cnt=0;
54        for(int i=1; i<n; ++i)
55           for(int j=i+1; j<=n; ++j){
56               nd[cnt].u=i;
57               nd[cnt].v=j;
58               nd[cnt++].d=sqrt( (x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]));
59           }
60        sort(nd, nd+cnt, cmp);
61        int cc=0;
62        for(int i=0; i<cnt; ++i)
63           if(Union(nd[i].u, nd[i].v))
64              ret[cc++]=nd[i].d;
65         for(int i=0; i<cc; ++i)
66            cout<<ret[i]<<"fdsf"<<endl;
67        printf("%.2lf\n", ret[n-m-1]);
68    }
69    return 0;
70 }
 1 //prim算法.......
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<algorithm>
 6 #include<cmath>
 7 using namespace std;
 8 const double INF = 0x3f3f3f3f*1.0;
 9 double x[800], y[800];
10
11 int n, m;
12 double map[505][505];
13 int vis[505];
14
15 double ret[505];
16
17 void prim(){
18     memset(vis, 0, sizeof(vis));
19     vis[1]=1;
20     for(int i=2; i<=n; ++i)
21        ret[i]=INF;
22     int root=1, p;
23     for(int i=1; i<n; ++i){
24         double minLen=INF;
25         for(int j=2; j<=n; ++j){
26            if(!vis[j] && ret[j]>map[root][j])
27               ret[j]=map[root][j];
28            if(!vis[j] && minLen>ret[j]){
29               minLen=ret[j];
30               p=j;
31            }
32         }
33         root=p;
34         vis[root]=1;
35     }
36 }
37
38 int main(){
39
40    int t;
41    scanf("%d", &t);
42    while(t--){
43           scanf("%d%d", &m, &n);
44        for(int i=1; i<=n; ++i)
45           scanf("%lf%lf", &x[i], &y[i]);
46        for(int i=1; i<n; ++i)
47           for(int j=i+1; j<=n; ++j)
48              map[i][j]=map[j][i]=sqrt( (x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]));
49
50        prim();
51        sort(ret, ret+n+1);
52
53        printf("%.2lf\n", ret[n-m+1]);
54    }
55    return 0;
56 }

本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/3899428.html,如需转载请自行联系原作者

vaOJ10369 - Arctic Network相关推荐

  1. Arctic Network题解+(最小生成树二次理解 )

    由于在上一篇文章用了大量的文字已经对于最小生成树的两种算法(克鲁斯卡尔和普利姆算法)做了基础的讲解,下面的话我就大概说一下思想和解题步骤,然后再在附加上一个昨天做题(虽然说很基础但是对于初学的我就有点 ...

  2. 【POJ - 2349】【UVA - 10369】 Arctic Network(最小生成树求权值第k大的边)(内附两种算法)

    题干: The Department of National Defence (DND) wishes to connect several northern outposts by a wirele ...

  3. poj2349:Arctic Network(最小生成树)

    总时间限制:  2000ms  内存限制:  65536kB 描述 The Department of National Defence (DND) wishes to connect several ...

  4. UVA10369 Arctic Network

    传送门 求一棵最小生成树,要求:忽略树上s-1条边的边权后,最大的边最小. (因为卫星频道是两两互达的,所以想把连接两个联通块之间的边权忽略必须用两个联通块都放置卫星频道.也就是至少要两个) emmm ...

  5. UvaOJ10369 - Arctic Network

    1 /* 2 The first line of each test case contains 1 <= S <= 100, the number of satellite channe ...

  6. Arctic Network UVA - 10369 (最小生成树,适合prim)

    给出n个点将他们连成最小生成树,给出k个卫星,有了这些卫星就可以无代价地连接一些边.求出在此条件下的最长的边 也就是求出最小生成树的第k小条边 考虑到这个图的边比较多,选择使用prim算法,需要注意的 ...

  7. POJ 2349 Arctic Network (MST中的第K长路)

    题目: http://poj.org/problem?id=2349 1)关于题意,开始code完了,才发现,样例都解释不过去,题意理解错误,最后才明白是求MST种的长度排序后的第K长的权值,这个题意 ...

  8. kuangbin带你飞专题合集

    题目列表 [kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题二 搜索进阶 [kuangbin带你飞]专题三 Dancing Links [kuangbin带你飞]专题四 最短路 ...

  9. 【HDOJ图论题集】【转】

    1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...

最新文章

  1. #define CV_DEFAULT(val) = val 这样的宏定义是没有问题的~
  2. windows通过putty连接虚拟机Fedora
  3. 使用kubectl delete pods xxx删除对应的pod,提示删除成功,但是立马又会生成一个。为何?
  4. boost::intrusive::avltree_algorithms用法的测试程序
  5. [转] 使用Docker容器,这些错误千万别犯
  6. ORACLE 执行计划分析
  7. 对BottomTagFragment的理解
  8. 你的ERP系统选对了吗?
  9. Waymo也商业化了!“早期乘客”项目开始测试收费,凤凰城人民掏了腰包
  10. keil ISIS AT89C51单片机
  11. C语言学习-翁凯(第十三章笔记)
  12. 几款用于电能质量测量的芯片
  13. 如何解决:使用Xbrowser软件连接服务器显示灰屏
  14. 俄罗斯方块游戏shell编程代码
  15. CF1000赛后总结
  16. TEMPORARY表空间和文件(转)
  17. 华为怎么退出子用户_华为游戏中心怎么退出账号的具体步骤
  18. python:重建二叉树
  19. 齿轮相关计算机,古希腊人的齿轮计算机
  20. 三分钟带你看懂HDMI接口的PCB设计

热门文章

  1. 长春金桥计算机学校,金桥学校2017年招生简章
  2. (多线程)leetcode1116. 打印零与奇偶数
  3. 李牛(Linux)脚本
  4. Python(23)-面向对象2-继承,多态
  5. cad怎么快速算面积_用cad算面积的快捷键方法步骤详细,大朗CAD培训班
  6. 密码学专题 证书和CA指令 证书和CA功能概述
  7. 算法入门篇三 详解桶排序和整理排序知识 堆的相关操作 补充 不完整
  8. 切记!职场邮件需注意的细节
  9. springCloud - 第9篇 - 同步配置文件(消息总线方式)
  10. insertSelective 和 insert 的区别