Guest User

Untitled

a guest
Feb 23rd, 2021
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. #define MAXN 100
  8.  
  9. vector<int> g[MAXN];
  10. vector<int> gr[MAXN];
  11. vector<bool> visited(MAXN, false);
  12. vector<int> scc(MAXN, -1);
  13. vector<int> sortT;
  14.  
  15. void sortTop(int u) {
  16.     visited[u] = true;
  17.     for(int i = 0; i < g[u].size(); ++i) {
  18.         int next = g[u][i];
  19.         if(!visited[next]) sortTop(next);
  20.     }
  21.     sortT.push_back(u);
  22. }
  23.  
  24.  
  25. void dfs(int u, int comp) {
  26.     scc[u] = comp;
  27.     for(int i = 0; i < gr[u].size(); ++i) {
  28.         int next = gr[u][i];
  29.         if(scc[next] == -1) dfs(next, comp);
  30.     }
  31. }
  32.  
  33.  
  34.  
  35. int findScc(int n) {
  36.     int comp = 0;
  37.     for(int i = 0; i < n; ++i) {
  38.         if(!visited[i]) sortTop(i);
  39.     }
  40.     reverse(sortT.begin(), sortT.end());
  41.     for(int i = 0; i < n; ++i) {
  42.         if(scc[i] == -1) {
  43.             comp++;
  44.             dfs(i, comp);
  45.         }
  46.     }
  47.     return comp;
  48.     // Sort Top --
  49.     // Rev Grafo --
  50.     // Dfs -> Sort Top --
  51. }
  52.  
  53. int main() {
  54.     int n, m, x, y;
  55.     cin >> n >> m;
  56.     for(int i = 0; i < m; ++i) {
  57.         cin >> x >> y;
  58.         g[x].push_back(y);
  59.         gr[y].push_back(x);
  60.     }
  61.     findScc(n);
  62.     for(int i = 0; i < n; ++i) {
  63.         cout << "Node " << i << " = " << scc[i] << endl;
  64.     }
  65.     return 0;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment