`
阿尔萨斯
  • 浏览: 4503302 次
社区版块
存档分类
最新评论

Codeforces 437D The Child and Zoo(贪心+并查集)

 
阅读更多

题目链接:Codeforces 437D The Child and Zoo

题目大意:小孩子去参观动物园,动物园分很多个区,每个区有若干种动物,拥有的动物种数作为该区的权值。然后有m条路,每条路的权值为该条路连接的两个区中权值较小的一个。如果两个区没有直接连接,那么f值即为从一个区走到另一个区中所经过的路中权值最小的值做为权值。问,平均两个区之间移动的权值为多少。

解题思路:并查集+贪心。将所有的边按照权值排序,从最大的开始连接,每次连接时计算的次数为连接两块的节点数的积(乘法原理)。

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
const int N = 1e5+5;

struct edge {
    int u, v, w;
}e[N];

int n, m, f[N], c[N], w[N];

bool cmp (const edge& a, const edge& b) {
    return a.w > b.w;
}

int getfar (int x) {
    return x == f[x] ? x : f[x] = getfar(f[x]);
}

void init () {
    scanf("%d%d", &n, &m);

    for (int i = 1; i <= n; i++) {
        f[i] = i;
        c[i] = 1;
        scanf("%d", &w[i]);
    }

    for (int i = 0; i < m; i++) {
        scanf("%d%d", &e[i].u, &e[i].v);
        e[i].w = min(w[e[i].u], w[e[i].v]);
    }

    sort(e, e + m, cmp);
}

int main () {
    init();
    double ans = 0;

    for (int i = 0; i < m; i++) {
        int p = getfar(e[i].u);
        int q = getfar(e[i].v);

        if (p != q) {
            ans += (double)e[i].w * c[p] * c[q];
            c[p] += c[q];
            f[q] = p;
        }
    }
    printf("%.6lf\n", ans * 2 / (n * 1.0 * (n-1)));
    return 0;
}
分享到:
评论

相关推荐

    linkfqy#CSDN_blog_backup#【贪心+线段树】Codeforces 557C Arthur and Tabl

    暴枚最长桌脚的长度$l$,然后长度比$l$长的桌脚全部都要砍掉长度比$l$短的桌脚选择代价前$k$小的砍掉用线段树维护;示例程序 :typedef long l

    linkfqy#CSDN_blog_backup#【并查集】Codeforces 566D Restructuring Comp

    【并查集】Codeforces 566D Restructuring Company题面在这里对于本题,只需要再维护一个并查集表示i所在联通块的最右位置因为相邻

    wuqd666#ZXBlog#Codeforces - 1131C. Birthday(贪心)1

    Codeforces - 1131C. Birthday(贪心)题目链接题目给你n和n个数,要你重新排列n个数,使得这些数的相邻差值中最大的那个值最小。stat

    Codeforces 988 D. Points and Powers of Two(数学+结论)

    《Codeforces 988 D. Points and Powers of Two》是一道融合了数学与算法的编程竞赛题目。问题的核心在于找到一个数组中的子序列,使得其中任意两个元素之间的差值都是2的幂次。目标是找到这样的子序列,其长度尽...

    CodeForces_1348EF – Phoenix and Memory 贪心+线段树找区间最小值

    贪心正确性显然:R大的至少可以选则R做为点来用。所以按R升序遍历,每次优先选左边的,能让后边的可选的更多。 用set维护可选的数即可。 这题加了个输出2个方案。 我们考虑最简单的情况:即确定一个序列后,是否有2...

    Codeforces++-crx插件

    Codeforces扩展包 是否曾经想让Codeforce拥有方便的快捷键,自动更新排行榜,可以按需隐藏/显示的问题标签,更好的站点导航,深色主题或以上所有功能? 这些和更多功能可以在Codeforces ++中获得! 该扩展是开源的,...

    Codeforces 题库 101-200

    Codeforces题库101-200介绍了一个在编程竞赛领域非常知名的平台——Codeforces。Codeforces是一个专注于计算机编程的俄罗斯网站,由一组来自萨拉托夫国立大学的竞技体育团队成员领导,由Mikhail Mirzayanov领导。该...

    Codeforces 1925D Good Trip 题解

    Codeforces 1925D Good Trip 题解

    Codeforces 题库 001-100

    标题 "Codeforces 题库 001-100" 暗示了这里讨论的是Codeforces网站上的前100个编程竞赛题目。Codeforces是一个专注于算法竞赛编程的俄罗斯网站,由来自萨拉托夫国立大学的一群体育爱好者组成,以Mikhail Mirzayanov...

    打codeforces的神器

    打codeforces的神器

    Codeforces 1305 D. Kuroni and the Celebration (交互题)

    题意: 给出 nnn 个点,n−1n-1n−1 条边,最多询问 n2\frac{n}{2}2n​ 次,每次询问 u,vu,vu,v,会给出 uvuvuv的最近公共祖先,求树的根。 ...操作就是一个删除叶子节点的过程。 AC代码: const int N = 1010;...

    CodeForces – 1300E Water Balance(贪心)

    题目大意:给出 n 个数字组成的序列,现在可以对数列进行多次操作,每次操作可以选择其中一段连续的数列,用其平均数替换原位置,换句话说,若原连续数列为 1 2 3,则可以替换为 2 2 2,问如何操作可以使得最后答案...

    codeforces enhancer 1.1.2

    Codeforces Enhancer 1.1.2是一款专为Google Chrome浏览器设计的插件,旨在提升用户在Codeforces编程竞赛平台上的体验。这个插件的主要目标是通过提供一系列实用功能,帮助程序员更有效地进行代码编写、测试和提交,...

    codeforces编程网站预测分数插件.zip

    Codeforces是一个广受欢迎的在线编程竞赛平台,尤其在ACM(国际大学生程序设计竞赛)社区中备受推崇。这个“codeforces编程网站预测分数插件.zip”文件似乎包含了一个专为Codeforces用户设计的插件,旨在帮助参赛者...

    CodeForces – 1305D Kuroni and the Celebration(思维,互动题)

    题目大意:给出一个由 n 个点组成的树,现在可以询问 n/2 次(向下取整)LCA,确定根节点是哪个节点 题目分析:因为最多只能求 n/2 次lca,每次需要两个节点作为参数,也就是说每个点我们至多遍历一遍,读完题后没什么...

    一个Codeforces、牛客竞赛、AtCoder平台的编程竞赛查询插件,ACMer必备.zip

    一个Codeforces、牛客竞赛、AtCoder平台的编程竞赛查询插件,ACMer必备.zip

    Educational Codeforces Round 157D. XOR Construction

    Educational Codeforces Round 157D. XOR Construction

    Codeforces题目泛做解题报告许昊然.pdf

    根据提供的文档信息,我们可以推断出这是一份由许昊然撰写的Codeforces题目的解题报告。许昊然是国际信息学奥林匹克(IOI)2012年和2013年的金牌获得者,因此他的解题报告极具参考价值。下面我们将详细解读这份报告...

    Codeforces 1105B - Zuhair and Strings 测试点37个(全) .doc

    这个问题是关于Codeforces平台上的一道编程竞赛题目,编号为1105B,名为"Zuhair and Strings"。从给出的部分内容来看,这是一道处理字符串并计算满足特定条件的子串数量的问题。测试点提供了多个输入和输出示例,...

    Codeforces codes_names_Codeforces_

    描述中的“Some of the Codeforces problems codes”进一步确认了我们将分析的是Codeforces平台上的部分问题代码。 在编程竞赛中,每个问题都有一个唯一的ID,通常由字母和数字组成,如“1358B”,“1358A”等。...

Global site tag (gtag.js) - Google Analytics