zoukankan      html  css  js  c++  java
  • 【POJ】[2349]Arctic Network

    这里写图片描述

    理解题意之后也并不算太难
    大意是给了一些坐标来求最小生成树
    然而让输出的是最大边的值,而因为还有卫星可供通讯
    所以只需要当有P个点S个卫星时
    共P-1条边里舍去S-1条大的边

    所以这里我感觉用Kruskal更好一些
    而且当取了
    P-1-(S-1)==P-S条边时,这一条边便是所要求边
    不需要进行后续操作了

    #include<stdio.h>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    
    struct edge {
        int u,v;
        double dis;
    } e[250200];
    
    int par[520];
    int ran[520];
    
    int find(int m) {
        if(m==par[m])
            return m;
        else
            return par[m]=find(par[m]);
    }
    void unite(int x,int y) {
        x=find(x);
        y=find(y);
        if(x==y)
            return;
        if(ran[x]<ran[y])
            par[x]=y;
        else {
            par[y]=x;
            if(ran[x]==ran[y])
                ran[x]++;
        }
    }
    bool cmp(edge A,edge B) {
        return A.dis<B.dis;
    }
    
    struct xy {
        double x,y;
    } x[520];
    int main() {
        int T;
        scanf("%d",&T);
        while(T--) {
            int S,N;
            scanf("%d %d",&S,&N);
            for(int i=1; i<=N; i++) {
                par[i]=i;
                ran[i]=0;
            }
            for(int i=1; i<=N; i++) {
                scanf("%lf %lf",&x[i].x,&x[i].y);
            }
            int cnt=-1;
            for(int i=1; i<=N; i++) {
                for(int j=1; j<=N; j++) {
                    if(i==j)
                        continue;
                    e[++cnt].u=i;
                    e[cnt].v=j;
                    e[cnt].dis=sqrt(pow(x[i].x-x[j].x,2)+pow(x[i].y-x[j].y,2));
                }
            }
            sort(e,e+cnt+1,cmp);
            double sum=0;
            int res=0;
            for(int i=0; i<=cnt; i++) {
                if(find(e[i].u)!=find(e[i].v)) {
                    res++;
                    if(res==N-S) {
                        printf("%.2lf
    ",e[i].dis);
                        break;
                    }
                    unite(e[i].u,e[i].v);
                }
            }
        }
        return 0;
    }
    

    题目地址:【POJ】[2349]Arctic Network

  • 相关阅读:
    Swift
    Swift
    Swift
    Swift
    Cocos2d Lua 越来越小样本 内存游戏
    Android组件系列----ContentProvider内容提供商【5】
    看你的门-攻击服务器(4)-HTTP参数注入攻击
    图片缩放中心
    正确lua简单的扩展,可以加速相关C++数据。
    epoll()无论涉及wait队列分析
  • 原文地址:https://www.cnblogs.com/BoilTask/p/12569760.html
Copyright © 2011-2022 走看看