Leetcode 1319. 連通網絡的操作次數 (貪心思想加並查集)

 

 

遍歷所有連接,如果發現節點沒有連接,就將節點連接,如果已經連接了則不用連且此時可用連接數++,最後統計下並查集中所有根節點。然後輸出答案。

class Union{
private:
    vector<int> p;
    int n;
public:
    Union(int n){
        this->n = n;
        p.resize(n);
        for(int i=0;i<n;i++) p[i] = i;
    }
    int find(int x){
        if(p[x]!=x) p[x] = find(p[x]);
        return p[x];
    }

    void unite(int x, int y){
        p[find(x)] = find(y);
    }

    bool isUnite(int x, int y){
        return find(x) == find(y);
    }
};

class Solution {
public:
    int makeConnected(int n, vector<vector<int>>& connections) {
        int res = 0,count = 0;
        Union un(n);
        for(auto connection:connections){
            if(!un.isUnite(connection[0],connection[1])){
                un.unite(connection[0],connection[1]);
            }else{
                count++;
            }
        }
        unordered_set<int> root;
        for(int i=0;i<n;i++){
            root.insert(un.find(i));
        }
        return (count>=root.size()-1?root.size()-1:-1);
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章