Cod sursa(job #3153108)

Utilizator DariusM17Murgoci Darius DariusM17 Data 28 septembrie 2023 08:00:35
Problema Componente tare conexe Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>
using namespace std;
#define FAST ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0) ;
ifstream fin("ctc.in") ;
ofstream fout("ctc.out") ;
const int NMAX=1e5+5 ;
vector <int> g[NMAX],ctc[NMAX],gt[NMAX],viz,st ;
int n,m,x,y,cnt ;
void dfs(int nod)
{
    if(!viz[nod])
    {
        viz[nod]=1 ;
        for(int it:g[nod]) dfs(it) ;
        st.push_back(nod) ;
    }
}
void dfsrev(int nod)
{
    if(!viz[nod])
    {
        viz[nod]=cnt ;
        for(int it: gt[nod]) dfsrev(it) ;
    }
}
int main()
{
    fin>>n>>m ;
    for(int i=1; i<=m; ++i)
    {
        fin>>x>>y ;
        g[x].push_back(y) ;
        gt[y].push_back(x);
    }
    viz=vector <int> (NMAX,0) ;
    for(int i=1; i<=n; ++i) if(!viz[i]) dfs(i) ;
    viz=vector <int> (NMAX,0) ;
    for(int i=st.size()-1; i>=0; --i) if(!viz[st[i]]) cnt++,dfsrev(st[i]) ;
    for(int i=1; i<=n; ++i) ctc[viz[i]].push_back(i) ;
    fout<<cnt<<'\n' ;
    for(int i=1; i<=cnt; ++i,fout<<'\n')
        for(int it:ctc[i]) fout<<it<<" ";
    return 0;
}