PRIM_poj 2349Arctic Network

原创 2012年03月26日 20:35:27

  题意:有两种不合的通信技巧,有卫星通信的两个城市之间可以随便率性联络,但用无线电通信的城市只能和间隔不跨越D的城市接洽。无线电的才能越高(即传输间隔D越大),花费就越大。已知无线电的数量m,让求最小的D。

之前自己写的prim算法是O(n^3)的,当写到这道题TLE过后,我才发觉我的算法写的很挫,本来PRIM应该是O(n^2)的,所以又重写写了一下,把这题给A了

#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<algorithm>
#define MAXN 550
#define INF 100000000

using namespace std;
typedef struct{
    double x,y;
}point;

point pt[MAXN];
double map[MAXN][MAXN];
bool visited[MAXN];
double LowValue[MAXN];//生成树到所在集合U到各个顶点的多条边中最短的一条
vector<double> usedValue;

double cal_dis(point p1, point p2){
    return sqrt((p1.x - p2.x)*(p1.x - p2.x) + (p1.y - p2.y)*(p1.y - p2.y));
}
double prim(int n,int s){
    usedValue.clear();
    int st;
    double minV;
    memset(visited,0, sizeof(visited));
    visited[0] = 1;
    for(int i = 1; i < n ;i++){
        LowValue[i] = map[0][i];
    }
    for(int i = 0; i < n - 1; i++){
        minV = INF;
        for(int j = 0; j < n; j++){
            if(!visited[j] && LowValue[j] < minV){
                minV = LowValue[j];
                st = j;
            }
        }
        visited[st] = 1;
        //printf("st:%d\n",st);
        usedValue.push_back(minV);
        for(int j = 0; j < n; j++){
            if(!visited[j] && map[st][j] < LowValue[j]) LowValue[j] = map[st][j];
        }

    }
    int len = usedValue.size();
    sort(usedValue.begin(), usedValue.end());
    //printf("s:%d  len:%d\n", s, len);
    //for(int i = 0;i < len; i++) printf("%.3f\n",map[0][1]);
    return usedValue[len - s];
}


int main(){
    int t, s, p;
    while(scanf("%d", &t) != EOF){
        while(t--){
            scanf("%d%d", &s, &p);
            for(int i = 0; i < p; i++){
                scanf("%lf%lf", &pt[i].x, &pt[i].y);
            }
            for(int i = 0 ; i < p; i++){
                for(int j =  i; j<p; j++){
                    map[i][j]= map[j][i] = cal_dis(pt[i], pt[j]);
                }
            }

            double result = prim(p,s);
            printf("%.2f\n", result);
        }
    }
    return 0;
}


POJ 2349 Arctic Network(Prim算法)

Arctic Network Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4526   ...

POJ - 2349----Arctic Network(prim)

Description The Department of National Defence (DND) wishes to connect several northern outposts by...

poj2349——Arctic Network(最小生成树+prim)

DescriptionThe Department of National Defence (DND) wishes to connect several northern outposts by a...

POJ 2349 Arctic Network 最小生成树 prim && kruscal

Arctic Network 克鲁斯卡尔(kruscal)或普里姆算法(Prim) 求最小生成树。 Arctic Network Time Limit: 2000MS Memory Li...

poj 2349 Arctic Network prim算法做

搞死我了,居然prim里面输入的点不一样,结果不一样。。。 Arctic Network Time Limit: 2000MS Memory Limit: 655...

Prim最小生成树【poj 2349 Arctic Network;poj 1287 NetWorking】

poj 2349 Arctic Network: 图我们构造完成,调用prim算法,把该算法中每一次贪心得到的最小权边存入一个数组中。算法结束后对那个数组sort递减排序。这样,前边最大的s个用...

POJ2349 Arctic Network 最小生成树

链接: 2349 题意:一个平面网络中 有M个卫星N个站点,每两个站点之间可以用通讯器联系或用卫星联系,用通讯器联系的花销和距离有关,用卫星联系则不需要花销。给出每个站点的...
  • AXuan_K
  • AXuan_K
  • 2015年01月24日 11:30
  • 654

Arctic Network (POJ 2349)

Description The Department of National Defence (DND) wishes to connect several northern outposts ...

poj2349:Arctic Network(最小生成树)

总时间限制: 2000ms 内存限制: 65536kB 描述The Department of National Defence (DND) wishes to connect severa...
  • z8110
  • z8110
  • 2015年08月13日 15:34
  • 871

POJ 2349 Arctic Network(最小生成树)

Arctic Network Time Limit: 2000MS   Memory Limit: 65536K       Description The Department...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PRIM_poj 2349Arctic Network
举报原因:
原因补充:

(最多只允许输入30个字)