Pagini recente » Cod sursa (job #2124790) | Cod sursa (job #359579) | Cod sursa (job #1952055) | Cod sursa (job #1899833) | Cod sursa (job #2557688)
#include <bits/stdc++.h>
#define Nmax 100005
using namespace std;
ifstream fin ("biconex.in");
ofstream fout ("biconex.out");
vector <vector <int>> b;
vector <int> v[Nmax];
stack <int> s;
int niv[Nmax], mi[Nmax], t[Nmax], n, m, x, y;
void dfs(int x)
{
mi[x]=niv[x];
s.push(x);
for(auto it:v[x])
if(it!=t[x])
{
if(niv[it])
mi[x]=min(mi[x],niv[it]);
else
{
t[it]=x;
niv[it]=niv[x]+1;
dfs(it);
mi[x]=min(mi[x], mi[it]);
}
}
if(mi[x]>=niv[x]-1 && x!=1)
{
b.push_back(*new vector <int>);
while(s.top()!=x)
{
b.back().push_back(s.top());
s.pop();
}
b.back().push_back(s.top());
s.pop();
b.back().push_back(t[x]);
}
}
int main()
{
fin >> n >> m;
for(int i=1;i<=m;i++)
{
fin >> x >> y;
v[x].push_back(y);
v[y].push_back(x);
}
niv[1]=1;
dfs(1);
fout << b.size() << '\n';
for(int i=0;i<b.size();i++)
{
for(auto it:b[i])
fout << it << ' ';
fout << '\n';
}
return 0;
}