Pagini recente » Cod sursa (job #2677478) | Cod sursa (job #1491393) | Cod sursa (job #2508947) | Cod sursa (job #2537093) | Cod sursa (job #1923313)
#include <bits/stdc++.h>
using namespace std;
#define f first
#define s second
ifstream fin( "biconex.in" );
ofstream fout( "biconex.out" );
vector <int> G[100010],sol[100010];
stack< pair<int,int> > stk;
int i,n,m,x,y,a,b,idx[100010],mini[100010],ans;
void DF( int nod, int parinte )
{
idx[ nod ] = idx[ parinte ] + 1;
mini[ nod ] = idx[ nod ];
for( auto it : G[ nod ] )
{
if( it != parinte )
{
if( !idx[ it ] )
{
stk.push( { nod , it } );
DF( it , nod );
if( mini[ it ] >= idx[ nod ] )
{
++ans;
a = 0;
b = 0;
do
{
a = stk.top().f;
b = stk.top().s;
sol[ ans ].push_back( b );
stk.pop();
} while (a != nod && b != it);
sol[ ans ].push_back( a );
}
}
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 );
}
DF( 1 , 0 );
fout<<ans<<'\n';
for( i = 1 ; i <= ans ; i++ )
{
for( auto it : sol[ i ] )
fout<<it<<' ';
fout<<'\n';
}
return 0;
}