Pagini recente » Cod sursa (job #2982785) | Cod sursa (job #3226938) | Cod sursa (job #1663831) | Cod sursa (job #466902) | Cod sursa (job #1679989)
#include <bits/stdc++.h>
#define Nmax 100005
#define pb push_back
using namespace std;
int n,lvl[Nmax],sus[Nmax],viz[Nmax],st[Nmax],top,nrComp;
vector <int> L[Nmax],Comp[Nmax];
inline void Dfs(int nod, int tata)
{
viz[nod]=1; sus[nod]=lvl[nod];
st[++top]=nod;
for(auto it : L[nod])
{
if(it==tata) continue;
if(viz[it]) sus[nod]=min(sus[nod],lvl[it]);
else
{
lvl[it]=lvl[nod]+1;
Dfs(it,nod);
if(sus[it]>=lvl[nod])
{
++nrComp;
while(top && st[top]!=it) Comp[nrComp].pb(st[top--]);
Comp[nrComp].pb(st[top--]);
Comp[nrComp].pb(nod);
}
sus[nod]=min(sus[nod],sus[it]);
}
}
}
int main()
{
int m,x,y,i;
ifstream cin("biconex.in");
ofstream cout("biconex.out");
cin>>n>>m;
while(m--)
{
cin>>x>>y;
L[x].pb(y); L[y].pb(x);
}
Dfs(1,0);
cout<<nrComp<<"\n";
for(i=1;i<=nrComp;++i)
{
for(auto it : Comp[i]) cout<<it<<" ";
cout<<"\n";
}
return 0;
}