Pagini recente » Cod sursa (job #1837259) | Cod sursa (job #1612920) | Cod sursa (job #1043090) | Cod sursa (job #734749) | Cod sursa (job #2884553)
#include <bits/stdc++.h>
using namespace std;
vector <int> v[100001];
vector <int> vec;
int low[100001],niv[100001];
bool viz[100001];
int cnt;
int steve[100001],vf;
vector <vector<int>> ans;
void dfs(int nod,int papa)
{
viz[nod]=1;
niv[nod]=low[nod]=1+niv[papa];
steve[++vf]=nod;
for(auto it:v[nod])
if(viz[it])
low[nod]=min(low[nod],niv[it]);
else
{
dfs(it,nod);
low[nod]=min(low[nod],low[it]);
if(low[it]==niv[nod])
{
ans.push_back({nod,it});
while(vf&&steve[vf]!=it)
ans.back().push_back(steve[vf--]);
vf--;
}
}
}
int main()
{
freopen("biconex.in","r",stdin);
freopen("biconex.out","w",stdout);
int n,i,m,a,b;
cin>>n>>m;
for(i=1; i<=m; i++)
{
cin>>a>>b;
v[a].push_back(b);
v[b].push_back(a);
}
for(i=1; i<=n; i++)
if(!viz[i])
dfs(i,0);
cout<<ans.size()<<'\n';
for(auto it:ans)
{
for(auto it1:it)
cout<<it1<<" ";
cout<<'\n';
}
return 0;
}