Pagini recente » Cod sursa (job #2049929) | Cod sursa (job #1885050) | Cod sursa (job #2287923) | Cod sursa (job #2020605) | Cod sursa (job #2866377)
#include <iostream>
#include <bits/stdc++.h>
#include <fstream>
using namespace std;
const int NMAX = 1e5;
ifstream fin( "ctc.in" );
ofstream fout( "ctc.out" );
stack <int> s;
vector <int> edges[NMAX+1];
vector <int> edges2[NMAX+1];
int viz[NMAX+1];
vector <int> components[NMAX+1];
int noComp = 0;
void dfs( int node ) {
viz[node] = true;
for( auto it: edges[node] ) {
if( !viz[it] )
dfs( it );
}
s.push( node );
}
void dfs2( int node ) {
viz[node] = true;
components[noComp].push_back( node );
for( auto it: edges2[node] ) {
if( !viz[it] )
dfs2( it );
}
}
int main() {
int n, m, i, a, b;
fin >> n >> m;
for( i = 0; i < m; i++ ) {
fin >> a >> b;
edges[a].push_back( b );
edges2[b].push_back( a );
}
dfs( 1 );
for( i = 1; i <= n; i++ )
viz[i] = false;
while( !s.empty() ) {
if( !viz[s.top()] ) {
dfs2( s.top() );
noComp++;
}
s.pop();
}
for( i = 0; i < noComp; i++ ) {
for( auto it: components[i] )
fout << it << " ";
fout << "\n";
}
return 0;
}