poj 2349 uva 10369 - Arctic Network

点击打开链接uva 10369

1题目意思:

某地有s颗卫星,有p个站点,s<p。现在两个站点之间可以靠卫星和无线电相连,如果是依靠卫星相连的 。那么两个站点的距离可以无限大。如果是依靠无线电先相连的那么两个站点的距离D越大那么费用越高。题目要求在利用完s个卫星后,剩下的利用无线电相连的时候求出最小的D值

2思路:最小生成树+第k大的边

3分析:
           1利用Prime算法,把最小生成数的边存储在ans数组里面,最后对ans按照从大到小排序,最后的ans就是ans[n-1].
           2由上面我们知道通过卫星相连的站点的距离可以很大,那么我们通过最小生成树求出来的最大的权值的边就可以当成是卫星来连接的,排序后那么扣除n条边,那么最后的ans就是ans[n-1];

4代码:

#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
#define MAXN 1010
#define INF 0xFFFFFFF

int t , s , p , cnt;
double ans[MAXN];
double G[MAXN][MAXN];
double lowcost[MAXN];
int vis[MAXN];
struct Point{
     double x;
     double y;
}point[MAXN];

bool cmp(double x , double y){
     return (x-y) > 1e-9;
}

void init(){
     for(int i = 1 ; i <= p ; i++){
        for(int j = 1 ; j <= p ; j++){
           double tmp_x = (point[i].x-point[j].x)*(point[i].x-point[j].x);
           double tmp_y = (point[i].y-point[j].y)*(point[i].y-point[j].y);
           G[i][j] = sqrt(tmp_x + tmp_y);
        }
     }
}

void Prime(){
     int pos;
     double min;
     memset(vis , 0 , sizeof(vis));
     memset(ans , 0 , sizeof(ans));
     vis[1] = 1;
     init();
     cnt = 0;
     for(int i = 1 ; i <= p ; i++)
        lowcost[i] = G[1][i];
     for(int i = 1 ; i <= p ; i++){
        min = INF;
        for(int j = 1 ; j <= p ; j++){
           if(!vis[j] && min-lowcost[j] > 1e-9){
              min = lowcost[j];
              pos = j;
           }
        }
        if(min == INF)
           break;
        ans[cnt++] = min;
        vis[pos] = 1;
        for(int j = 1 ; j <= p ; j++){
           if(!vis[j] && lowcost[j]-G[pos][j] > 1e-9)
             lowcost[j] = G[pos][j];
        }
     }
     sort(ans , ans+cnt , cmp);
     printf("%0.2lf\n" , ans[s-1]);
}

int main(){
   // freopen("input.txt" , "r" , stdin);
    scanf("%d" , &t);
    while(t--){
        scanf("%d%d" , &s , &p);
        for(int i = 1 ; i <= p ; i++)
           scanf("%lf%lf" , &point[i].x , &point[i].y);
        Prime();
    }
    return 0;
}
时间: 2024-11-01 02:10:38

poj 2349 uva 10369 - Arctic Network的相关文章

UVa 10369:Arctic Network(求最小生成树的第k小边)

链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1310 题目: Problem C: Arctic Network The Department of National Defence (DND) wishes to connect several northern outposts by a wir

poj 2560 uva 10034 - Freckles

点击打开链接uva 10034 题目意思:  给定n个点的坐标,要求找到最短的路径将这些点链接起来 思路:  Prime + 最小生成树 分析:  给定n个点的坐标,要求找到最短路.很明显的最小生成树的题目,利用Prime就可以.这里记得要先求出每一条边的长度 代码: #include<algorithm> #include<iostream> #include<cstdio> #include<cstring> #include<cmath>

uva 1329 Corporative Network

点击打开链接uva 1329 思路: 带权并查集 分析: 1 看懂题目就是切菜了 代码: #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int MAXN = 20010; int n; int father[MAXN]; int rank[MAXN]; void init(){ memset(rank ,

UvaOJ10369 - Arctic Network

/* The first line of each test case contains 1 <= S <= 100, the number of satellite channels! 注意:S表示一共有多少个卫星,那么就是有 最多有S-1个通道! 然后将最小生成树中的后边的 S-1通道去掉就行了! 思路:最小生成树中的第 k 个最小边! */ //克鲁斯克尔算法..... #include<iostream> #include<cstdio> #include<

最小生成树【完结】

第一题 hdu 1232 畅通工程 点击打开hdu 1232 思路:模板题 点击查看代码 第二题 hdu 1233 还是畅通工程 点击打开hdu 1233 思路:模板题 点击查看代码 第三题 uva 10034 Freckles 点击打开uva 10034 思路:模板题 点击查看代码 第四题 uva 10397 Connect the Campus 点击打开uva 10397 思路:模板题 点击查看代码 第五题 uva 10369 Arctic Network 点击打开uva 10369 思路:

《程序设计解题策略》——1.2 利用最小生成树及其扩展形式解题

1.2 利用最小生成树及其扩展形式解题 设G=(V,E,ω)是连通的有权无向图(节点集为V,边集为E,边权集为ω),连通图G中包含所有节点,且只有V-1条边的连通子图即为G的生成树.边权值和最小的生成树称为最小生成树.在现实生活中,最小生成树的原理和算法有着广泛的应用.程序设计竞赛中与最小生成树有关的试题一般有两类: 1) 构建最小生成树. 2) 应用最小生成树原理优化算法. 本节除了深入研讨最小生成树的性质和求解方法外,还给出了三种特殊类型生成树: 1) 最优比率生成树. 2) 最小k度限制生

并查集专题【完结】

个人整理 并查集 [poj] 第一题 poj 1182 食物链 点击打开链接poj 1182 思路: 带权并查集 分析: 1 典型的带权并查集的题目 2 如果x和y是同类的关系认为是0,如果是x吃y那么关系认为是1,那么x和y的关系为2就说明y吃x 3 那么如果x和y同类则rank[x] == rank[y] , 如果x吃y那么rank[x] == (rank[y]+1)%3 , 注意mod3的使用 点击查看代码 第二题 poj 1308 Is It A Tree? 点击打开链接 poj 130

poj 3164 Command Network:最小树形图模板题

链接: http://poj.org/problem?id=3164 题目: Command Network Time Limit: 1000MS     Memory Limit: 131072K Total Submissions: 8922     Accepted: 2609 Description After a long lasting war on words, a war on arms finally breaks out between littleken's and Knu

UVa 1267 Network:DFS&amp;amp;贪心

1267 - Network Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=456&page=show_problem&problem=3708 Consider a tree network with n nodes where the internal nodes correspond to servers a