当前位置: 首页 > news >正文

蓝桥杯真题 - 缴纳过路费 - 题解

题目链接:https://www.lanqiao.cn/problems/19736/learning/

个人评价:难度 2 星(满星:5)
前置知识:并查集


整体思路

  • 按边权从小到大处理,将处理过的边的两个端点合入一个并查集中;
  • 由此,在处理到第 i i i 条边时,如果边的两个端点不在并查集中,那么这两个端点各自在的并查集中所有端点,都必须经过这条边才能到达对面的端点,所以该边两端所有点之间的“最贵”收费就是这条边的权值,因此如果该边权值在区间 [ L , R ] [L, R] [L,R] 内,那么这条边对答案的贡献就是两边并查集节点数的乘积。

过题代码

#include <bits/stdc++.h>
using namespace std;

typedef long long LL;
const int maxn = 200000 + 100;
struct Edge {
    int u, v, w;
    Edge() {}
    Edge(int u, int v, int w): u(u), v(v), w(w) {}
};

bool operator<(const Edge &a, const Edge &b) {
    return a.w < b.w;
}

int n, m, l, r, u, v, w;
LL ans;
int fa[maxn], num[maxn];
Edge edge[maxn];

void init() {
    for (int i = 1; i <= n; ++i) {
        fa[i] = i;
        num[i] = 1;
    }
}

int findF(int x) {
    return x == fa[x] ? x : fa[x] = findF(fa[x]);
}

void union_(int x, int y) {
    x = findF(x);
    y = findF(y);
    if (x != y) {
        fa[x] = y;
        num[y] += num[x];
    }
}

int main() {
#ifdef ExRoc
    freopen("test.txt", "r", stdin);
#endif // ExRoc
    ios::sync_with_stdio(false);

    cin >> n >> m >> l >> r;
    init();
    for (int i = 1; i <= m; ++i) {
        cin >> edge[i].u >> edge[i].v >> edge[i].w;
    }
    sort(edge + 1, edge + 1 + m);
    for (int i = 1; i <= m; ++i) {
        u = findF(edge[i].u);
        v = findF(edge[i].v);
        w = edge[i].w;
        if (w >= l && w <= r && u != v) {
            ans += num[u] * num[v];
        }
        union_(u, v);
    }
    cout << ans << endl;

    return 0;
}
http://www.dtcms.com/a/31836.html

相关文章:

  • 【Agent的革命之路——LangGraph】工作流中的 Command 模式
  • 【C语言】(一)数据在计算机中的存储与表示
  • 解决Excel文件格式损坏问题:如何通过程序读取并复制内容
  • MySQL 中的索引数量是否越多越好?
  • hot100_139. 单词拆分
  • Linux-Ansible模块进阶
  • 【我的Android进阶之旅】Android Studio SDK Update Site 国内的腾讯云镜像配置指南
  • 【Arduino小项目】控制步进电机
  • 通俗易懂的DOM1级标准介绍
  • YOLOv8与DAttention机制的融合:复杂场景下目标检测性能的增强
  • 车载诊断架构 --- LIN节点路由转发注意事项
  • 中兴G7615AV5
  • 直角三角堰计算公式
  • AutoGen 技术博客系列 八:深入剖析 Swarm—— 智能体协作的新范式
  • Linux操作系统4-进程间通信5(共享内存实现两个进程通信)
  • 【多模态处理篇二】【深度揭秘:DeepSeek视频理解之时空注意力机制解析】
  • 2025年华为手机解锁BL的方法
  • 函数指针和函数名在内存中是如何表示的
  • 计算机专业知识【揭开汇编的神秘面纱:从基础概念到实际应用】
  • VMware虚拟机手动安装VMware Tools
  • 合并区间(56)
  • [创业之路-321]:创新开拓思维和经营管理思维的比较
  • rkipc main.c 中 rk_param_init函数分析
  • vue3项目开发总结
  • Java 12~14 新特性
  • 力扣LeetCode: 2506 统计相似字符串对的数目
  • 围棋打谱应用软件设计制作
  • C++ Primer 容器库概述
  • RocketMq\Kafka如何保障消息不丢失?
  • 【微服务优化】ELK日志聚合与查询性能提升实战指南