1. 程式人生 > 其它 >Leetcode每日一題:1319 連通網路的操作次數 (並查集)

Leetcode每日一題:1319 連通網路的操作次數 (並查集)

技術標籤:leetcode演算法

分析

並查集問題,遍歷所有邊把點之間的關係關聯起來,最後看一下總的連通塊個數,減去1就是答案。

C++ 程式碼

class Solution {
public:
    int find(int x)
    {
        if(fa[x]!=x) fa[x]=find(fa[x]);
        return fa[x];
    }
    unordered_set<int> s;
    vector<int> fa;
    int makeConnected(int n, vector<vector<int>>& connections) {
        int need=connections.size();
        if(need+1<n) return -1;
        fa=vector<int>(n);
        for(int i=0;i<n;i++) fa[i]=i;   
        for(int i=0;i<need;i++)
        {
            int faa=find(connections[i][0]),fbb=find(connections[i][1]);
            fa[faa]=fbb;
        }
        for(int i=0;i<n;i++)
        {
            s.insert(find(fa[i]));  //統計總連通塊的個數
        }
        return s.size()-1;  //返回總個數-1
    }
};