题解 | #最小生成树#

最小生成树

https://www.nowcoder.com/practice/735a34ff4672498b95660f43b7fcd628

class Solution {
public:
    static bool cmp(vector<int>& x, vector<int>& y){ //重载比较,按照边权递增
        return x[2] < y[2];
    }
    
    int find(vector<int>& parent, int x){ //向上找到最高的父亲
        if(parent[x] != x)
            parent[x] = find(parent, parent[x]);
        return parent[x];
    }
    int miniSpanningTree(int n, int m, vector<vector<int> >& cost) {
        vector<int> parent(n + 1);
        for(int i = 0; i <= n; i++) //初始父亲设置为自己
            parent[i] = i;
        sort(cost.begin(), cost.end(), cmp); //边权递增排序
        int res = 0;
        for(int i = 0; i < cost.size(); i++){ //遍历所有的边,将连通的放入同一个并查集
            int x = cost[i][0];
            int y = cost[i][1];
            int z = cost[i][2];
            int px = find(parent, x); //查找x的最上边父亲
            int py = find(parent, y); // 查找y的最上边父亲
            if(px != py){ //如果二者不在同一个集合
                res += z; //边加入
                parent[px] = py; //设置二者在同一个集合
            }
        }
        return res;
    }
};

全部评论

相关推荐

点赞 评论 收藏
分享
感性的干饭人在线蹲牛友:🐮 应该是在嘉定这边叭,禾赛大楼挺好看的
点赞 评论 收藏
分享
10-25 12:05
已编辑
湖南科技大学 Java
若梦难了:我有你这简历,已经大厂乱杀了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务