https://practice.geeksforgeeks.org/problems/strongly-connected-components-kosarajus-algo/1
void dfs(vector adj[],int vis[],vector&a,int i){
vis[i]=1;
for(int j=0;j<adj[i].size();j++){
if(vis[adj[i][j]]==0){
dfs(adj,vis,a,adj[i][j]);
}
}
a.push_back(i);
}
void adfs(vector adr[],int avis[],int i){
avis[i]=1;
for(int j=0;j<adr[i].size();j++){
if(avis[adr[i][j]]==0){
adfs(adr,avis,adr[i][j]);
}
}
}
int kosaraju(int v, vector adj[])
{
vectoradr[v];
for(int i=0;i<v;i++){
for(int j=0;j<adj[i].size();j++){
adr[adj[i][j]].push_back(i);
}
}
int vis[v]={0};
vector a;
for(int i=0;i<v;i++){
if(vis[i]==0){
dfs(adj,vis,a,i);
}
}
int count=0;
int avis[v]={0};
for(int i=v-1;i>=0;i–){
if(avis[i]==0){
count=count+1;
adfs(adr,avis,a[i]);
}
}
return count;
}