5G 网络建设(300 分档)

题目描述

某地要建设 5G 网络,共有 N 个基站(编号 1~N),以及 V 条候选光缆线路。第 i 条线路连接基站 A 和 B,建设成本为 C。要求修建若干条线路使得所有基站互相连通 ,求最小总建设成本;若无论如何都无法连通,输出 -1。

数据范围: 1 ≤ N ≤ 1000,1 ≤ V ≤ N*(N-1)/2,1 ≤ C ≤ 10⁴。

示例

复制代码
输入:
3 3
1 2 3
1 3 1
2 3 5

输出:
4

说明:选择 1-3(成本1)和 1-2(成本3),总成本 4 最小。

思路

最小生成树经典题,用 Kruskal 算法 + 并查集:

  1. 把所有边按成本从小到大排序;
  2. 依次考察每条边:若两端点不在同一集合(用并查集判断),选它并合并集合;
  3. 选满 N-1 条边即得最小总成本;扫完边数不足 N-1,说明图不连通,输出 -1。

C 代码

复制代码
#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int u, v, w;
} Edge;

int cmpEdge(const void *a, const void *b)
{
    const Edge *ea = (const Edge *)a;
    const Edge *eb = (const Edge *)b;
    return ea->w - eb->w;
}

#define MAXN 1005
int fa[MAXN];                       /* 并查集父节点 */

int find(int x)
{
    if (fa[x] != x) fa[x] = find(fa[x]);   /* 路径压缩 */
    return fa[x];
}

int main(void)
{
    int n, m;
    if (scanf("%d %d", &n, &m) != 2) return 0;

    Edge *e = (Edge *)malloc(m * sizeof(Edge));
    for (int i = 0; i < m; i++)
        scanf("%d %d %d", &e[i].u, &e[i].v, &e[i].w);

    /* 1. 按成本升序排序 */
    qsort(e, m, sizeof(Edge), cmpEdge);

    /* 2. 初始化并查集 */
    for (int i = 1; i <= n; i++) fa[i] = i;

    /* 3. 贪心选边 */
    long long total = 0;
    int used = 0;                           /* 已选边数 */
    for (int i = 0; i < m && used < n - 1; i++) {
        int ru = find(e[i].u), rv = find(e[i].v);
        if (ru == rv) continue;             /* 两端已连通,选它会成环 */
        fa[ru] = rv;
        total += e[i].w;
        used++;
    }

    if (used == n - 1) printf("%lld\n", total);
    else               printf("-1\n");     /* 图不连通 */

    free(e);
    return 0;
}
相关推荐
DYWorker00111 小时前
第1课:基于正点原子RK3568开发板读懂Linux内核
linux·运维·网络
Lzg_na12 小时前
数据链路层差错控制使用的算法详解
网络
努力努力再努力wz13 小时前
【C++ 高阶系列】C++ 高性能网络编程:当 Reactor 遇见协程:从 epoll 回调到异步 MySQL,彻底打通任务挂起与恢复
网络·c++·mysql
loulanyue_13 小时前
当AI学会自主攻击与渗透破壁:Agent行为链失控与Mythos级攻防颠覆下的安全范式重构——读CNCC2026第六届网络生态治理论坛实录
网络·人工智能·安全
2401_8685347813 小时前
英语演讲:麻省理工校长2024年毕业典礼演讲
服务器·网络
码完就睡14 小时前
Linux——以太网协议
运维·服务器·网络·1024程序员节
CV爱数码14 小时前
论文精读|RED-CNN:残差编解码网络,低剂量 CT 去噪的经典基线
网络·人工智能·算法·cnn·ct·重建·x-ray
星恒讯工业路由器14 小时前
Modbus透传和Modbus网关有什么区别?从字节转发到协议翻译的选型思路
网络·物联网·modbus·工业物联网·工业网关·rs485·协议转换
李&@杰14 小时前
交换机PoE供电不足导致AP反复重启故障处理
网络·华为
香蕉大香蕉(06敬畏市场)14 小时前
高频八股 · Java 并发编程(10):异步、ThreadLocal 与虚拟线程(收官)
java·开发语言·网络·jvm·python·ai·实习