Pagini recente » Cod sursa (job #2870727) | Cod sursa (job #327141) | Cod sursa (job #1115986) | Cod sursa (job #3172339) | Cod sursa (job #1648553)
#include <iostream>
#include <cstdio>
#include <vector>
#include <stack>
#define nmax 100006
using namespace std;
int n,m1;
unsigned int niv[nmax],tata[nmax];
vector<int> m[nmax],cb;
vector < vector<int> > sol;
stack<int> s;
inline void get_sol(int nod,int origin)
{
cb.clear();
while(s.top()!=nod) { cb.push_back(s.top()); s.pop(); }
s.pop();
cb.push_back(nod); cb.push_back(origin);
sol.push_back(cb);
}
int con(int nod,int dad)
{
niv[nod]=niv[dad]+1; tata[nod]=niv[dad]+1;
for(vector<int>::iterator it=m[nod].begin();it!=m[nod].end();it++)
{
if(*it==dad) continue;
if(!niv[*it])
{
s.push(*it);
con(*it,nod);
tata[nod]=min(tata[nod],tata[*it]);
if(niv[nod]<=tata[*it])
get_sol(*it,nod);
}
else tata[nod]=min(tata[nod],tata[*it]);
}
}
int main()
{
int n1,n2,i,j;
freopen("biconex.in","r",stdin);
freopen("biconex.out","w",stdout);
scanf("%d%d",&n,&m1);
for(;m1;m1--)
{
scanf("%d%d",&n1,&n2);
m[n1].push_back(n2);
m[n2].push_back(n1);
}
for(i=1;i<=n;i++)
if(!niv[i])
{
s.push(i);
con(i,0);
}
printf("%d\n",sol.size());
for(i=0;i<sol.size();i++)
{
for(j=0;j<sol[i].size();j++) printf("%d ",sol[i][j]); printf("\n");
}
fclose(stdin);
fclose(stdout);
return 0;
}