Pagini recente » Cod sursa (job #313814) | Cod sursa (job #1256540) | Cod sursa (job #576330) | Cod sursa (job #1603746) | Cod sursa (job #1146809)
#include <fstream>
#include <list>
#define fori(l) for(list<int>::iterator it=(l).begin();it!=(l).end();++it)
using namespace std;
int n,m,bcni;
list<int> g[100001],*crt,*bcn[100001];
int level[100001],low[100001];
void dfs(int nod,int tt)
{
level[nod]=low[nod]=level[tt]+1;
fori(g[nod])
{
if(*it==tt)
continue;
if(!level[*it])
{
dfs(*it,nod);
low[nod]=min(low[nod],low[*it]);
if(!tt || low[*it]>=level[nod])
{
crt->push_back(nod);
bcn[++bcni]=crt;
crt=new list<int>;
}
}
else
low[nod]=min(low[nod],level[*it]);
}
crt->push_back(nod);
}
ifstream fin("biconex.in");
ofstream fout("biconex.out");
int main()
{
int i,j;
fin>>n>>m;
while(m--)
{
fin>>i>>j;
g[i].push_back(j);
g[j].push_back(i);
}
crt=new list<int>;
for(i=1;i<=n;++i)
if(!level[i])
{
crt->clear();
dfs(i,0);
}
fout<<bcni<<"\n";
for(i=1;i<=bcni;++i)
{
fori(*(bcn[i]))
fout<<*it<<" ";
fout<<"\n";
}
return 0;
}