当前位置: 首页 > 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;
}

相关文章:

  • 【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
  • 宁波市人大常委会审议生育工作报告,委员建议学前教育免费
  • 86岁书画家、美术教育家、吴昌硕嫡裔曾孙吴民先离世
  • 青岛鞋企双星名人集团家族内斗:创始人发公开信指控子孙夺权
  • 非洲中青年军官代表团访华,赴北京、长沙、韶山等地参访交流
  • 马上评|比起奇葩论文,更可怕的是“水刊”灰产
  • 中年人多活动有助预防阿尔茨海默病