在leetcode上编译过不了,


class UnionFind {
public:
    UnionFind(int sz) : root(sz), rank(sz) {
        for (int i = 0; i < sz; i++) {
            root[i] = i;
            rank[i] = 1;
        }
    }

    int find(int x) {
        while (x != root[x]) {
            x = root[x];
        }
        return x;
    }

    void unionSet(int x, int y) {
        int rootX = find(x);
        int rootY = find(y);
        if (rootX != rootY) {
            if (rank[rootX] > rank[rootY]) {
                root[rootY] = rootX;
            } else if (rank[rootX] < rank[rootY]) {
                root[rootX] = rootY;
            } else {
                root[rootY] = rootX;
                rank[rootX] += 1;
            }
        }
    }

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

private:
    vector<int> root;
    vector<int> rank;
};


int main() {
    char c;
    int i,j=1;
    int n=2005,ans=0;
    int province[2005]={0};
    UnionFind city(n);
    while (cin>>c) if (c=='[') break;
    do{
        i=0;
        while (cin>>c){
            if (c==']') break;
            if (c=='1'){
                i++;
                city.unionSet(i,j);
            }
            else if (c=='0') i++;    
        }
        j++;n=i;
    }while(j<n);
    for (int i=1;i<=n;i++){
        if (!province[city.find(i)]){
            ans++;
            province[city.find(i)]=1;
        }
    }
    cout<<ans;
    return 0;
}

img