leetcode 1319.连通网络的操作次数
已经连通的点可以视为集合,用并查集记录集合,搜一遍得到集合个数。设点数为$n$,边数为$s$,集合个数为$num$。那么有两种情况:
1)$s<n-1$,不能全部连通。
2)$s>=n-1$,最少操作数是$num-1$。(随便取冗边,反正能把集合都连起来就行。因为$s>=n-1$,所以是肯定能取到冗边的,不用管怎么取。)
int s; int fa[100007]; int find(int a){ return fa[a]==a?a:fa[a]=find(fa[a]); } bool flag[100007]; int num; // the number of sets class Solution { public: int makeConnected(int n, vector<vector<int>>& connections) { s=connections.size(); // the number of edges if (s+1<n) return -1; for (int i=0;i<n;i++) fa[i]=i; for (int i=0,a,b;i<s;i++){ a=find(connections[i][0]),b=find(connections[i][1]); if (a!=b) fa[a]=b; } num=0; for (int i=0;i<n;i++) if (i==find(i)) num++; return num-1; } }; //

浙公网安备 33010602011771号