题解 | #最小生成树#

最小生成树

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

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 返回最小的花费代价使得这n户人家连接起来
     * @param n int n户人家的村庄
     * @param m int m条路
     * @param cost intvector<vector<>> 一维3个参数,表示连接1个村庄到另外1个村庄的花费的代价
     * @return int
     */
    
    static bool cmp(vector<int>& a, vector<int>& b) {
        int n = a.size() - 1;
        int m = b.size() - 1;
        return a[n] < b[m];
    }
    int find(int a, vector<int>& p) {
        if(p[a] != a)
            p[a] = find(p[a], p);
        return p[a];
    }
    int kruskal(vector<vector<int>>& cost, vector<int>& p, int& res) {
        int n = cost.size();
        int m = cost[0].size();
        // 保证输入的每个cost为3个数值
        if(m != 3)
            return 0;
        // 记录进入集合的村庄数
        int count = 0;
        for(int i = 0; i < n; i++) {
            int a = cost[i][0];
            int b = cost[i][1];
            if(find(a, p) != find(b, p)) {
                p[find(a, p)] = find(b, p);
                count++;
                res += cost[i][2];
            }
        }
        return count;
    }
    int miniSpanningTree(int n, int m, vector<vector<int> >& cost) {
        // write code here
        int res = 0;
        // 并查集父亲数组,判断村庄是否已经进入集合
        vector<int> p(n + 1);
        sort(cost.begin(), cost.end(), cmp);
        // 初始化并查集
        for(int i = 0; i < cost.size(); i++) {
            int n1 = cost[i][0];
            int n2 = cost[i][1];
            p[n1] = n1;
            p[n2] = n2;
        }
        int count  = kruskal(cost, p, res);
        if(count == n - 1)
            return res;
        else
            return 0;
    }
};
全部评论

相关推荐

最近和朋友聊天,她说了句让我震惊的话:"我发现我连周末点外卖都开始'最优解'了,一定要赶在高峰期前下单,不然就觉得自己亏了。"这不就是典型的"班味入侵"吗?工作思维已经渗透到生活的方方面面。
小型域名服务器:啊?我一直都这样啊?我还以为是我爱贪小便宜呢?每次去实验室都得接一杯免费的开水回去,出门都得规划一下最短路径,在宿舍就吃南边的食堂,在实验室就吃北边的食堂,快递只有顺路的时候才取。
点赞 评论 收藏
分享
头像
11-21 11:39
四川大学 Java
是红鸢啊:忘了还没结束,还有字节的5k 违约金
点赞 评论 收藏
分享
ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务