Cod sursa(job #2527750)

Utilizator AlexPascu007Pascu Ionut Alexandru AlexPascu007 Data 20 ianuarie 2020 20:48:25
Problema Componente tare conexe Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>
#define DIM 100010
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
int n,m,i,x,y,nivel,ctc,niv[DIM],low[DIM];
stack<int> st;
bitset<DIM> f,instack;
vector<int> L[DIM],comp[DIM];
void dfs(int nod) {
    nivel++;
    niv[nod]=low[nod]=nivel;
    st.push(nod);
    instack[nod]=1;
    f[nod]=1;
    for (int i=0;i<L[nod].size();i++) {
        int vecin=L[nod][i];
        if (!f[vecin]) {
            dfs(vecin);
            low[nod]=min(low[nod],low[vecin]);
        }
        else
            if (instack[vecin])
                low[nod]=min(low[nod],niv[vecin]);
    }
    if (low[nod]==niv[nod]) {
        ctc++;
        do {
            x=st.top();
            instack[x]=0;
            st.pop();
            comp[ctc].push_back(x);
        }
        while (x!=nod);
    }
}
int main() {
    fin>>n>>m;
    while (m--) {
        fin>>x>>y;
        L[x].push_back(y);
    }
    for (i=1;i<=n;i++)
        if (!f[i])
            dfs(i);
    fout<<ctc<<"\n";
    for (i=1;i<=ctc;i++) {
        for (auto it:comp[i])
            fout<<it<<" ";
        fout<<"\n";
    }
    return 0;
}