Pagini recente » Cod sursa (job #283237) | Cod sursa (job #1463511) | Cod sursa (job #2736297) | Cod sursa (job #2192465) | Cod sursa (job #2338926)
#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() ;
}