Pagini recente » Cod sursa (job #2511699) | Cod sursa (job #3129308) | Cod sursa (job #501479) | Cod sursa (job #2574035) | Cod sursa (job #1588304)
#include <fstream>
#include <vector>
#include <stack>
#define pb push_back
#define Ndim 100005
using namespace std;
ifstream fin("biconex.in");
ofstream fout("biconex.out");
int N,M,nrcbc,Low[Ndim],Lev[Ndim];
bool VIZ[Ndim];
vector <int> G[Ndim],CBC[Ndim];
stack <int> Stv;
void read()
{
int i,a,b;
fin>>N>>M;
for(i=1;i<=M;i++)
{
fin>>a>>b;
G[a].pb(b);
G[b].pb(a);
}
}
void DFS(int nod,int tata)
{
VIZ[nod] = 1;
Lev[nod] = Lev[tata] + 1;
Low[nod] = Lev[nod];
Stv.push(nod);
for(size_t i = 0; i<G[nod].size();i++)
{
int vecin = G[nod][i];
if(vecin == tata)
continue;
if(VIZ[vecin] == 1)
Low[nod] = min(Low[nod],Lev[vecin]);
else
{
DFS(vecin,nod);
Low[nod] = min(Low[nod],Low[vecin]);
if(Low[vecin] >= Lev[nod])
{
nrcbc++;
CBC[nrcbc].pb(nod);
int x;
do
{
CBC[nrcbc].pb(Stv.top());
x = Stv.top();
Stv.pop();
}while(x!=vecin);
}
}
}
}
void print()
{
fout<<nrcbc<<'\n';
for(int i=1;i<=nrcbc;i++)
{
for(size_t j=0;j<CBC[i].size();j++)
fout<<CBC[i][j]<<' ';
fout<<'\n';
}
}
int main()
{
read();
DFS(1,0);
print();
return 0;
}