Cod sursa(job #2338926)

Utilizator Andrei-27Arhire Andrei Andrei-27 Data 8 februarie 2019 00:01:59
Problema Componente tare conexe Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <bits/stdc++.h>
#define pb push_back
using namespace std ;
const int NR = 100005 ;
ifstream in ("ctc.in") ;
ofstream out ("ctc.out") ;
vector < int > v_t [ NR ] , ctc [ NR ] , st , v [ NR ] ;
int viz [ NR ] , nrctc  , n , m ;
void dfs ( int nod )
{
    viz [ nod ] = 1 ;
    for ( size_t i = 0 ; i < v [ nod ].size() ; ++ i )
    {
        int vecin = v [ nod ][ i ] ;
        if ( !viz [ vecin ] )   dfs ( vecin ) ;
    }
    st.pb( nod ) ;
}
void dfs_t ( int nod )
{
    viz [ nod ] = 2 ;
    for ( size_t i = 0 ; i < v_t [ nod ].size() ; ++ i )
    {
        int vecin = v_t [ nod ][ i ] ;
        if ( viz [ vecin ] != 2 ) dfs_t ( vecin ) ;
    }
    ctc [ nrctc ].pb ( nod ) ;
}
void solve ( )
{
    for ( int i = 1 ; i <= n ; ++ i )   if ( !viz [ i ] )   dfs ( i ) ;

    for ( int i = 1 ; i <= n ; ++ i )
    {
        if ( viz [ i ] != 2 )     dfs_t ( i ) , ++ nrctc ;
    }
    cout << nrctc << "\n" ;
    for ( int i = 0 ; i < nrctc ; ++ i , cout << '\n' )
    for ( size_t j = 0 ; j < ctc [ i ].size() ; ++ j )
    cout << ctc [ i ][ j ] << " " ;

}
int  main ()
{
cin >> n >> m ;
while ( m -- )
{
    int x , y ; cin >> x >> y ;
    v [ x ].pb( y ) ;
    v_t [ y ].pb ( x ) ;
}
solve() ;
}