Pagini recente » Cod sursa (job #1928739) | Cod sursa (job #3166600) | Rating Nguyen Tien Trung Kien (kien_coi_1997) | Cod sursa (job #2305741) | Cod sursa (job #1459577)
#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define st first
#define nd second
#define Min(A,B) (A < B ? A : B )
using namespace std;
const int Dim = 100001;
vector < int > G[Dim];
vector < vector< int > > Sol;
stack < pair < int,int > > S;
int N,M,D[Dim],L[Dim];
void DFS(int Node,int lvl,int P)
{
D[Node] = L[Node] = lvl;
for (int it = 0;it < G[Node].size();it++)
{
if (G[Node][it] == P)
continue;
if (!D[G[Node][it]])
{
S.push(mp(Node,G[Node][it]));
DFS(G[Node][it],lvl + 1,Node);
L[Node] = Min(L[Node],L[G[Node][it]]);
if (L[G[Node][it]] >= D[Node])
{
vector < int > Comp;
int X,Y;
do
{
X = S.top().st;
Y = S.top().nd;
S.pop();
Comp.pb(X);
Comp.pb(Y);
}while(X != Node && Y != G[Node][it]);
Sol.pb(Comp);
}
}
else
L[Node] = Min(L[Node],D[G[Node][it]]);
}
}
int main()
{
freopen("biconex.in","r",stdin);
freopen("biconex.out","w",stdout);
scanf("%d %d",&N,&M);
while(M--)
{
int A,B;
scanf("%d %d\n",&A,&B);
G[A].pb(B);
G[B].pb(A);
}
DFS(1,1,0);
printf("%d\n",Sol.size());
for (int i = 0;i < Sol.size();i++)
{
memset(D,0,sizeof(D));
for (int j = 0;j < Sol[i].size();j++)
if (!D[Sol[i][j]])
printf("%d ",Sol[i][j]),D[Sol[i][j]] = 1;
printf("\n");
}
}