首页 > 其他分享 >ABC 214D Sum of Maximum Weights(并查集模拟删边)

ABC 214D Sum of Maximum Weights(并查集模拟删边)

时间:2022-11-22 23:57:11浏览次数:93  
标签:214D int Sum 查集 Maximum fa Weights 边权

ABC 214D Sum of Maximum Weights(并查集模拟删边)

Sum of Maximum Weights

​ 给出有 \(n\;(2 \le n \le 1e5)\)个点的一棵树,定义\(f(x, y)\)表示从节点 x 到节点 y 的最短路中的最大边权。

请输出\(\sum_{i=1}^{N-1} \sum_{j=i+1}^{N}\,f(i, j)\)

思路:

​ 首先我们可以知道,由于这是一棵树,所以路径是唯一的。那么从 i 到 j 的路径上,只有一个最大的边权会造成贡献,我们就考虑往贡献的方向思考。对于一条边来说,当且仅当这条边为某两个点路径中最大边权的时候,会对答案造成贡献。

​ 我们把通过这条边的所有点分成两个集合,可以发现以这条边为最大边权的那些点具有一个特点:就是在连接该条边使他们联通之前,没有比这个边权值更大的边,这个时候,这条边就会对那些点做出贡献。所以我们就可以从小到大连边,模拟一个删边的过程,也是类似一个最小生成树的过程。

代码

​ 边权从小到大排序,用这条边连接的集合大小乘上边权就是这条边对答案的贡献。

const int N = 100005;

vector<array<int, 3> > vc;
int fa[N];
ll cnt[N];
int n;

int fd(int x)  
{
    if(fa[x] != x)  fa[x] = fd(fa[x]);
    return fa[x];
}

int main()
{
    cin >> n;
    for(int i = 1; i < n; i ++)
    {
        int u, v, w;
        cin >> u >> v >> w;
        vc.push_back({w, u, v});
    }
    for(int i = 1; i <= n; i ++)
        fa[i] = i, cnt[i] = 1;
    sort(all(vc));

    ll res = 0;
    for(auto x : vc)
    {
        int w = x[0], u = x[1], v = x[2];
        int fx = fd(u), fy = fd(v);
        if(fx == fy)    continue;
        res += cnt[fx] * cnt[fy] * w;
        cnt[fy] += cnt[fx];
        fa[fx] = fy;
    }
    cout << res << '\n';
}

标签:214D,int,Sum,查集,Maximum,fa,Weights,边权
From: https://www.cnblogs.com/DM11/p/16916943.html

相关文章

  • 可撤销并查集学习笔记
    前言与可持久化并查集一起食用,效果更佳。前置知识:并查集以及并查集的按秩合并优化。例题引入你需要维护一棵\(n\)个点的动态森林,初始时是\(n\)个散点,有\(q\)个......
  • T292115 [传智杯 #5 练习赛] 树的变迁(并查集+倒序操作处理树分裂)
    T292115[传智杯#5练习赛]树的变迁题目大意:给定一棵具有\(n\)个节点的树,每个节点有一个初始权值\(a_i\)。一共需要进行\(m\)次操作,每次操作包括:1.1e编号......
  • cloud-consumer-order80 微服务消费者订单Module模块
    1、建cloud-provider-payment80012、改POM<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http:......
  • Kafka transaction hanging causes consumer to stuck
    Kafka事务未关闭导致消费者无法消费消息。背景最近遇到一个问题:有一个公用topic,很多应用都读写这个topic。从某个时间点开始,所有消费该topic的消费者(read_committed级别)......
  • 并查集
    title:并查集date:2022-11-1511:49:57tags:算法本文章遵守知识共享协议CC-BY-NC-SA,转载时需要署名,推荐在我的个人博客阅读。并查集是一种数据结构,用于合并两个......
  • Kafka(2)- consumer
    1.基本概念消费kafka消息的客户端称为consumer,consumer负责订阅kafka的topic,并从该topic上拉取消息。除了consumer本身,kafka还有一个消费组(consumergroup)的概念。每......
  • 并查集教学
    并查集简介并查集是一个树形的数据结构,能够实现以下功能:将两个节点所属的两个集合合并查询两个节点是否在一个集合里并查集教学我们以洛谷的并查集板题为例P3367......
  • [LeetCode] 2221. Find Triangular Sum of an Array
    Youaregivena0-indexedintegerarraynums,wherenums[i]isadigitbetween0and9(inclusive).Thetriangularsumofnumsisthevalueoftheonlyelemen......
  • Hitachi2020E Odd Sum Rectangles
    Hitachi2020E看到\(\oplus\)操作和\(2^n-1\)时猜结论\(ans_{i,j}=\operatorname{popcount}(i\&j)\bmod2\),过不去,然后就不会了。然而令答案的二维前缀和为\(\opera......
  • XOR Sum of Arrays
    section>ProblemStatementForsequences$B=(B_1,B_2,\dots,B_M)$and$C=(C_1,C_2,\dots,C_M)$,eachoflength$M$,consistingofnon-negativeintegers,lettheX......