Introduction: In this tutorial we are going to write full program of disjoint set union find advance data structure in c++. Problem Description: Disjoint Set Union (DSU) is an advance data structure, which basically uses in graph algorithms to find cycles. Codes: Method1: Brute Force #include<bits/stdc++.h> using namespace std; int find(int f,vector<int>&dsuf){ if(dsuf[f]==-1) return f; return find(dsuf[f],dsuf); } void union_op(int from, int to, vector<int>& dsuf){ dsuf[from]=to; } bool isCycle(vector<pair<int,int> >&edge_list, vector<int>&dsuf){ for(int i=0;i<edge_list.size();i++){ int parent1=find(edge_list[i].first,dsuf); int parent2=find(edge_list[i].second,dsuf); if(parent1==pare...
Introduction: In this tutorial, we are going to implement DFS to solve another important problem. this is a good question for interview point of view. Problem Statement: Leetcode Input: [[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0], [0,1,1,0,1,0,0,0,0,0,0,0,0], [0,1,0,0,1,1,0,0, 1 ,0, 1 ,0,0], [0,1,0,0,1,1,0,0, 1 , 1 , 1 ,0,0], [0,0,0,0,0,0,0,0,0,0, 1 ,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0], [0,0,0,0,0,0,0,1,1,0,0,0,0]] Output: 6 Solution: So basically we are going to use DFS to solve this problem, and we will use a 2D vector to track the already visited element. let's see the code: Full Code: int helper(vector<vector<int>>& grid,int x, int y, vector<vector<int>>&visited){ if(x<0 || x>=grid.size() || y<0 || y>=grid[x].size()) return 0; if(grid[x][y]==0){ return 0; } if(visited[x][y]==1){ return 0; } visited[x][y]=1; // cout<<x...