Ejemplo n.º 1
0
    void  connect(int a, int b) {
        if (a < 1 || a >= mParentId.size() || b < 1 || b >= mParentId.size()){
            return;//error
        }

        auto aId = UnionFind(a);
        auto bId = UnionFind(b);
        if(aId != bId) {
            mParentId[aId].first = bId;
            mParentId[bId].second += mParentId[aId].second;
        }
    }
Ejemplo n.º 2
0
    int query(int a) {
        if (a < 1 || a >= mParentId.size()){
            return -1;//error
        }

        auto aId = UnionFind(a);
        return mParentId[aId].second;
    }
Ejemplo n.º 3
0
vector<Edge> kruskal(int V, vector<Edge>& edges){
	auto union_find = UnionFind(V);
	sort(edges.begin(), edges.end());
	vector<Edge> res;
	for(auto& edge: edges){
		if(union_find.unite(edge.from, edge.to)){
			res.push_back(edge);
		}
	}
	return res;
}
Ejemplo n.º 4
0
 vector<int> numIslands2(int m, int n, vector<pair<int, int>>& positions) {
     if(positions.empty()) return vector<int>();
     UnionFind uf = UnionFind();
     vector<int> res;
     
     for(int i = 0; i < positions.size(); ++i){
         int x = positions[i].first;
         int y = positions[i].second;
         int idx = x*n+y;
         
         uf.add(idx);
         
         if(x+1<m) uf.unionF(idx, (x+1)*n+y);
         if(x>0) uf.unionF(idx, (x-1)*n+y);
         if(y+1<n) uf.unionF(idx, x*n+y+1);
         if(y>0) uf.unionF(idx, x*n+y-1);
         res.push_back(uf.getCnt());
     }
     return res;
     
 }