Pagini recente » Cod sursa (job #930972) | Cod sursa (job #332655) | Cod sursa (job #573279) | Cod sursa (job #2810341) | Cod sursa (job #1947409)
#include <bits/stdc++.h>
using namespace std;
#define f first
#define s second
ifstream fin( "biconex.in" );
ofstream fout( "biconex.out" );
int i,j,n,m,k,mini[100010],idx[100010],ans,x,y,a,b;
vector<int> G[100001],sol[100010];
stack< pair<int,int> > st;
void DF( int nod, int father )
{
idx[ nod ] = mini[ nod ] = idx[ father ] + 1;
for( auto it : G[ nod ] )
{
if( it != father )
{
if( !idx[ it ] )
{
st.push( {it,nod} );
DF( it , nod );
if( mini[ it ] >= idx[ nod ] )
{
a = 0;
b = 0;
++ans;
do
{
a = st.top().f;
b = st.top().s;
sol[ ans ].push_back( a );
st.pop();
}while( b != nod );
sol[ ans ].push_back( nod );
}
}
mini[ nod ] = min( mini[ nod ] , mini[ it ] );
}
}
}
int main()
{
fin>>n>>m;
for( i = 1 ; i <= m ; i++ )
{
fin>>x>>y;
G[ x ].push_back( y );
G[ y ].push_back( x );
}
for( i = 1 ; i <= n ; i++ )
{
if( !idx[ i ] )
DF( i , 0 );
}
fout<<ans<<'\n';
for( i = 1 ; i <= ans ; i++ )
{
for( auto it : sol[ i ] )
fout<<it<<' ';
fout<<'\n';
}
return 0;
}