Strongly Connected Components (SCC) - YessineJallouli/Competitive-Programming GitHub Wiki

#include <bits/stdc++.h>
#define ll long long
#define SaveTime ios_base::sync_with_stdio(false), cin.tie(0);

using namespace std;

const int N = 2e5+7;
vector<vector<int>> graph(N);
vector<vector<int>> inv_graph(N);

deque<int> p;
deque<int> component;

bool marked[N];
int cmp[N];

void dfs(int node) {
   if (marked[node])
      return;
   marked[node] = true;
   for (int v : graph[node])
      dfs(v);
   p.push_front(node);
}

void dfs1(int node) {
   if (marked[node])
      return;
   marked[node] = true;
   for (int v : inv_graph[node])
      dfs1(v);
   component.push_front(node);
}

int main() {
   SaveTime
   int n,m; cin >> n >> m;
   for (int i = 0; i < m; ++i) {
      int a,b; cin >> a >> b;
      graph[a].push_back(b);
      inv_graph[b].push_back(a);
   }
   for (int i = 0; i < n; i++)
      dfs(i);
   for (int i = 0; i <= n; i++)
      marked[i] = false;
   int scc = 0;
   for (int i = 0; i < n; i++) {
      if (marked[p[i]])
         continue;
      component.clear();
      dfs1(p[i]);
      for (int j : component)
         cmp[j] = scc;
      scc++;
   }
}


Resources :
https://youtu.be/i6jRvjlsuC4

⚠️ **GitHub.com Fallback** ⚠️