Cod sursa(job #2710857)

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