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

  • 相关阅读:
    微信小程序~事件绑定和冒泡
    为promise增加abort功能
    Object构造函数的方法 之 Object.freeze
    ES6新特性:JavaScript中内置的延迟对象Promise
    js 预编译
    什么是PWA?PWA的发展趋势
    CSS隐藏元素的方法及区别
    网页编码:UTF-8、GB2312
    Mixin 和 CSS Guards
    css自定义checkbox样式
  • 原文地址:https://www.cnblogs.com/BoilTask/p/12569760.html
Copyright © 2011-2022 走看看