Pagini recente » Cod sursa (job #2355244) | Cod sursa (job #2473656) | Cod sursa (job #83825) | Cod sursa (job #809944) | Cod sursa (job #1928890)
#include <bits/stdc++.h>
using namespace std;
int n,m,i,j,x,y,nr,k,st[200010],low[100010],niv[100010];
vector<int>v[100010],ans[100010];
bool ap[100010];
void dsf/*da...e intentionat...*/(int nod,int tata)
{
ap[nod]=true;
niv[nod]=niv[tata]+1;
low[nod]=niv[nod];
for(int i=0; i<v[nod].size(); ++i)
if(ap[v[nod][i]]&&v[nod][i]!=tata)low[nod]=min(low[nod],niv[v[nod][i]]);
else if(!ap[v[nod][i]])
{
st[++k]=v[nod][i];
dsf(v[nod][i],nod);
low[nod]=min(low[nod],low[v[nod][i]]);
if (low[v[nod][i]]>=niv[nod])
{
++nr;
while(st[k]!=v[nod][i])ans[nr].push_back(st[k--]);
--k;
ans[nr].push_back(nod);
ans[nr].push_back(v[nod][i]);
}
}
}
int main()
{
ifstream f ("biconex.in");
ofstream g ("biconex.out");
f>>n>>m;
for(i=1; i<=m; ++i)
{
f>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
st[++k]=1;
dsf(1,0);
g<<nr<<'\n';
for(i=1; i<=nr; ++i)
{
for(j=0; j<ans[i].size(); ++j)
g<<ans[i][j]<<" ";
g<<'\n';
}
return 0;
}