Pagini recente » Cod sursa (job #2706229) | Cod sursa (job #2510423) | Cod sursa (job #2552659) | Cod sursa (job #1969584) | Cod sursa (job #2576608)
#include <bits/stdc++.h>
using namespace std;
ifstream f("biconex.in");
ofstream g("biconex.out");
const int nmax=100005;
vector <int>v[nmax],ans[nmax];
stack <pair <int,int>>s;
bool viz[nmax];
int n,m,x,y,i,l[nmax],nv[nmax],nr,r,sol;
void dfs(int nod,int p)
{
viz[nod]=1;
l[nod]=nv[nod]=++nr;
for(auto i:v[nod])
{
if(i==p)continue;
if(!viz[i])
{
s.push({nod,i});
dfs(i,nod);
if(l[nod]>l[i])l[nod]=l[i];
if(l[i]>=nv[nod]&&nod!=r)
{
sol++;
while(!s.empty()&&!(s.top().first==nod && s.top().second==i))
{
ans[sol].push_back(s.top().first);
ans[sol].push_back(s.top().second);
s.pop();
}
if(!s.empty())
{
ans[sol].push_back(s.top().first);
ans[sol].push_back(s.top().second);
s.pop();
}
}
}
else l[nod]=min(nv[i],l[nod]);
}
}
int main()
{
f>>n>>m;
for(i=1; i<=m; i++)
{
f>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
dfs(1,0);
g<<sol<<'\n';
for(i=1;i<=sol;i++)
{
sort(ans[i].begin(),ans[i].end());
g<<ans[i][0]<<' ';
for(int j=1;j<ans[i].size();j++)
if(ans[i][j]!=ans[i][j-1])
g<<ans[i][j]<<' ';
g<<'\n';
}
return 0;
}