• P2847 [USACO16DEC]Moocast(gold)奶牛广播-金


    题目描述

    Farmer John's NN cows (1 leq N leq 10001N1000) want to organize an emergency "moo-cast" system for broadcasting important messages among themselves.

    Instead of mooing at each-other over long distances, the cows decide to equip themselves with walkie-talkies, one for each cow. These walkie-talkies each have a limited transmission radius, but cows can relay messages to one-another along a path consisting of several hops, so it is not necessary for every cow to be able to transmit directly to every other cow.

    The cows need to decide how much money to spend on their walkie-talkies. If they spend XX, they will each get a walkie-talkie capable of transmitting up to a distance of sqrt{X}X. That is, the squared distance between two cows must be at most XX for them to be able to communicate.

    Please help the cows determine the minimum integer value of XX such that a broadcast from any cow will ultimately be able to reach every other cow.

    FJ的N头牛(1≤N≤1000)为了在他们之间传播信息, 想要组织一个"哞哞广播"系统. 奶牛们决定去用步话机装备自己而不是在很远的距离之外互相哞哞叫, 所以每一头奶牛都必须有一个步话机. 这些步话机都有一个限制传播半径, 但是奶牛们可以间接地通过中间奶牛传播信息, 所以并不是每头牛都必须直接向其他每一头奶牛连边.

    奶牛们需要去决定多少钱花在步话机上, 如果他们花了$X, 那么他们都将会得到sqrt(x)距离的步话机. 所以, 两头牛之间的欧几里得距离平方最多是X. 请帮助奶牛们找到最小的X使得图是强连通的.、

    输入格式

    The first line of input contains NN.

    The next NN lines each contain the xx and yy coordinates of a single cow. These are both integers in the range 0 ldots 25,000025,000.

    输出格式

    Write a single line of output containing the integer XX giving the minimum amount the cows must spend on walkie-talkies.

    输入输出样例

    输入 #1
    4
    1 3
    5 4
    7 2
    6 1
    输出 #1
    17
    

    说明/提示

    感谢@MrMorning 提供翻译

    根本用不着二分答案嘛。直接N^2N2建边,跑一遍KruskalKruskal。记录在最小生成树中的最长的一条边。显然只要使得这条边能够建立,那么这棵最小生成树中的所有的边都可以建立。答案就是最长的边的距离的平方,注意要用doubledouble存边权。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    
    using namespace std;
    
    const int maxn = 1e3+3;
    int n, x[maxn], y[maxn], cnt, tot, f[maxn];
    double Ans;
    struct Edge {
        int u, v;
        double w;
    }ed[maxn * maxn];
    inline bool cmp(Edge a, Edge b) {
        return a.w < b.w;
    }
    inline int find(int x) {
        if(x == f[x]) return x;
        else return f[x] = find(f[x]);
    }
    inline void Kruskal() {
        for(int i=1; i<=n; i++) f[i] = i;
        for(int i=1; i<=n; i++) {
            for(int j=1; j<=n; j++) {
                if(i != j) {
                    ++cnt;
                    ed[cnt].u = i, ed[cnt].v = j, ed[cnt].w = sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
                }
            }
        }
        sort(ed+1, ed+1+cnt, cmp);
        for(int i=1; i<=cnt; i++) {
            int xx = find(ed[i].u), yy = find(ed[i].v);
            if(xx != yy) {
                f[xx] = find(yy);
                tot ++;
                Ans = ed[i].w;
            }
            if(tot == n-1) {
                break;
            }
        }
    }
    
    int main(){
        scanf("%d", &n);
        for(int i=1; i<=n; i++) {
            scanf("%d%d", &x[i], &y[i]);
        }
        Kruskal();
        printf("%.0lf", Ans * Ans);
    }
  • 相关阅读:
    链接脚本语法
    STM32 硬件IIC接口总线
    C99一些特性
    oneid与用户标签之间的相互打通 实现用户标签
    图计算实现ID_Mapping、Oneid打通数据孤岛
    对于hive使用的一点记录
    centos7 hue安装
    Kafka监控安装
    hadoop2.6.0集群搭建
    centos6+cdh5.4.0 离线搭建cdh搭建
  • 原文地址:https://www.cnblogs.com/hrj1/p/11575742.html
Copyright © 2020-2023  润新知