Pagini recente » Cod sursa (job #2814524) | Cod sursa (job #1492297) | Cod sursa (job #2537544) | Cod sursa (job #2052819) | Cod sursa (job #2123531)
#include <bits/stdc++.h>
using namespace std;
#define f first
#define s second
#define mp make_pair
stack<pair<int,int> >s;
vector<int>v[100010],c[100010];
int viz[100010],niv[100010],low[100010],t[100010],b[100010];
int n,m,total;
void df(int i){
int k,j,nr=v[i].size(),fiu;
pair<int,int> a;
viz[i]=1;low[i]=niv[i];
for (j=0;j<nr;j++){
fiu=v[i][j];
if (fiu!=t[i]&&niv[i]>niv[fiu]) s.push(mp(i,fiu));
if (!viz[fiu]){
t[fiu]=i;
niv[fiu]=niv[i]+1;
df(fiu);
low[i]=min(low[i],low[fiu]);
if (low[fiu]>=niv[i]){
a=s.top();total++;
s.pop();
b[a.f]=1;
b[a.s]=1;
while ((a.f!=i||a.s!=fiu)&&(a.f!=fiu||a.s!=i)){
a=s.top();
s.pop();
b[a.f]=1;
b[a.s]=1;
}
for (k=1;k<=n;k++) if (b[k]) {c[total].push_back(k);b[k]=0;}
}
}
else if (fiu!=t[i]){
low[i]=min(low[i],niv[fiu]);
}
}
}
int main()
{
freopen("biconex.in","r",stdin);
freopen("biconex.out","w",stdout);
int i,x,y,r,rr,j;
scanf("%d%d",&n,&m);
for (i=1;i<=m;i++){
scanf("%d%d",&x,&y);
v[x].push_back(y);
v[y].push_back(x);
}
niv[1]=1;
r=1;
df(1);
printf("%d\n",total);
for (i=1;i<=total;i++){
rr=c[i].size();
for (j=0;j<rr;j++)
printf("%d ",c[i][j]);
printf("\n");
}
return 0;
}