【刷题】图论——最小生成树:局域网

要想去除边,并且不改变连通性,而且去除的值最大,相当于保留最小生成树。

注意这题连通块有若干个,所以运行Kruskal相当于形成若干个最小生成树
如果是prim只能事先处理好各个连通块,然后在连通块内部单独用prim

题目链接

cpp 复制代码
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;
const int N = 110;
const int M = 10010;

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

Edge e[M];
int p[N];
int n, m;

int find(int x) {
    if (p[x] != x) p[x] = find(p[x]);
    return p[x];
}
int kruskal() {
    for (int i = 1; i <= n; i ++ ) p[i] = i;
    sort(e, e + m);
    int res = 0;
    for (int i = 0; i < m; i ++ ) {
        int a = find(e[i].a);
        int b = find(e[i].b);
        if (a != b) {
            p[a] = b;
        }
        else {
            res += e[i].w;
        }
    }
    return res;
}
int main() {
    scanf("%d%d", &n, &m);
    int a, b, w;
    for (int i = 0; i < m; i ++ ) {
        scanf("%d%d%d", &a, &b, &w);
        e[i] = {a, b, w};
    }
    cout << kruskal() << endl;
}
相关推荐
Moonbit1 天前
月报Vol.03: 新增Bitstring pattern支持,构造器模式匹配增强
后端·算法·github
快手技术1 天前
多模态大模型Keye-VL-1.5发布!视频理解能力更强!
算法
薛定谔的算法1 天前
JavaScript数组操作完全指南:从基础到高级
前端·javascript·算法
可爱的小小小狼1 天前
算法:位运算
算法
VisionPowerful1 天前
九.弗洛伊德(Floyd)算法
算法·c#
可爱的小小小狼1 天前
算法:哈希表
redis·算法·散列表
点云侠1 天前
解决Visual Studio 2022编译工程速度慢的问题
开发语言·c++·ide·算法·计算机视觉·visual studio
THMAIL1 天前
深度学习从入门到精通 - 迁移学习实战:用预训练模型解决小样本难题
人工智能·python·深度学习·算法·机器学习·迁移学习
.鱼子酱1 天前
机器学习 - 使用 ID3 算法从原理到实际举例理解决策树
算法·决策树·机器学习
Q741_1471 天前
C++ 前缀和 高频笔试考点 实用技巧 牛客 DP34 [模板] 前缀和 题解 每日一题
开发语言·c++·算法·前缀和·牛客网