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

  • 相关阅读:
    数据类型比较(==)
    uniapp(一)
    小程序分包
    小程序网易云(五)
    java.lang的详解
    有哪些日常节省时间的诀窍?
    怎么把知乎的回答转化成自己的知识?
    linux下搭建hadoop环境
    linux下,免密码登录
    mac下创建用户及赋予sudo权限
  • 原文地址:https://www.cnblogs.com/BoilTask/p/12569759.html
Copyright © 2011-2022 走看看