#include<bits/stdc++.h> void mkadj(unordered_map<int, set<int>> &mp, vector<vector<int>> &edges) { for(int i=0;i<edges.size();i++) { int u = edges[i][0]; int v = edges[i][1]; mp[u].insert(v); mp[v].insert(u); } } void dfs(unordered_map<int, set<int>> &mp, unordered_map<int, bool> &visited, vector<int> &comp, int node) { comp.push_back(node); visited[node]=true; for(auto x:mp[node]) { if(!visited[x]) dfs(mp, visited, comp, x); } } vector<vector<int>> depthFirstSearch(int V, int E, vector<vector<int>> &edges) { unordered_map<int, set<int>> mp; unordered_map<int, bool> visited; mkadj(mp, edges); vector<vector<int>> ans; for(int i=0;i<V;i++) { if(!visited[i]) { vector<int> comp; dfs(mp, visited, comp, i); ans.push_back(comp); } } return ans; // Write your code here }