Pagini recente » Cod sursa (job #1086834) | Cod sursa (job #949278) | Cod sursa (job #677493) | Cod sursa (job #875060) | Cod sursa (job #2528462)
#include <bits/stdc++.h>
#define mp make_pair
using namespace std;
ifstream f("biconex.in");
ofstream g("biconex.out");
int n,m,k,niv[1<<17],l[1<<17],t[1<<17];
vector <int> v[1<<17],c[1<<17];
stack <pair<int,int>> st;
void DFS(int nod)
{ l[nod]=niv[nod];
vector <int> :: iterator it;
for(it=v[nod].begin(); it!=v[nod].end(); it++)
if(!niv[*it])
{ t[*it]=nod;
niv[*it]=niv[nod]+1;
st.push(mp(nod,*it));
DFS(*it);
l[nod]=min(l[nod],l[*it]);
if(niv[nod]<=l[*it])
{ int x=nod,y=(*it);
if(st.size()==1)
{ c[k].push_back(st.top().first);
c[k].push_back(st.top().second);
st.pop();
}
else
{ while(st.top().first!=x || st.top().second!=y)
{ c[k].push_back(st.top().second);
st.pop();
}
c[k].push_back(x);
c[k].push_back(y);
st.pop();
}
k++;
}
}
else
if(t[nod]!=(*it))
l[nod]=min(l[nod],niv[*it]);
}
int main()
{ f>>n>>m;
for(int x,y; f>>x>>y;)
{ v[x].push_back(y);
v[y].push_back(x);
}
niv[1]=1;
DFS(1);
g<<k<<'\n';
for(int i=0; i<k; i++)
{ vector <int> :: iterator it;
for(it=c[i].begin(); it!=c[i].end(); it++)
g<<(*it)<<' ';
g<<'\n';
}
f.close(); g.close(); return 0;
}