Leetcode每日一題:1319 連通網路的操作次數 (並查集)
阿新 • • 發佈:2021-01-24
分析
並查集問題,遍歷所有邊把點之間的關係關聯起來,最後看一下總的連通塊個數,減去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 } };