Pagini recente » Cod sursa (job #2642014) | Cod sursa (job #1826182) | Cod sursa (job #2805663) | Cod sursa (job #1162900) | Cod sursa (job #2818202)
#include <bits/stdc++.h>
#define pb push_back
using namespace std;
vector<int> v[100005],cbc[100005];
stack<int> s;
int nr_cbc=0,cnt=0,t[100005],t_min[100005];
void add(int x,int y)
{
nr_cbc++;
while(s.top()!=y)
{
cbc[nr_cbc].pb(s.top());
s.pop();
}
cbc[nr_cbc].pb(y);
cbc[nr_cbc].pb(x);
s.pop();
}
void dfs(int nod,int tata)
{
t_min[nod]=t[nod]=++cnt;
s.push(nod);
for(auto fiu:v[nod])
{
if(t[fiu]==0)
{
dfs(fiu,nod);
t_min[nod]=min(t_min[nod],t_min[fiu]);
if(t_min[fiu]>=t[nod])
add(nod,fiu);
}
else if(fiu!=tata)
t_min[nod]=min(t_min[nod],t[fiu]);
}
}
int main()
{
ifstream cin("biconex.in");
ofstream cout("biconex.out");
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
v[x].pb(y);
v[y].pb(x);
}
for(int i=1;i<=n;i++)
{
if(!t[i])
dfs(i,0);
}
cout<<nr_cbc<<"\n";
for(int i=1;i<=nr_cbc;i++)
{
for(auto idk:cbc[i])
cout<<idk<<" ";
cout<<"\n";
}
return 0;
}