Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- int components=0;
- unordered_map<int, int> parent, rank;
- public:
- int findParent(int x){
- if(!parent.count(x)){
- parent[x] = x;
- rank[x] = 0;
- components++;
- }
- return (parent[x] == x) ? x : (parent[x] = findParent(parent[x]));
- }
- void unionSet(int x, int y){
- int px = findParent(x);
- int py = findParent(y);
- if(px != py){
- components--;
- if(rank[x] > rank[y]){
- parent[py] = px;
- }
- else{
- parent[px] = py;
- rank[y]++;
- }
- }
- }
- int removeStones(vector<vector<int>>& stones) {
- for(vector<int> stone: stones)
- unionSet(stone[0], ~stone[1]);
- return stones.size()-components;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement