Pagini recente » Cod sursa (job #1830641) | Cod sursa (job #2895558) | Cod sursa (job #668852) | Cod sursa (job #2729639) | Cod sursa (job #1335337)
#include<fstream>
#include<vector>
//#include<iostream>
#include<stack>
#define pb push_back
#define st s.top()
using namespace std;
ifstream in("biconex.in");
ofstream out("biconex.out");
int N,M,t[100005],niv[100005],l[100005],u,af[100005],mm;
bool viz[100005];
vector<int> v[100005];
vector< pair<int,int> > sol[200005];
vector< pair<int,int> > :: iterator it;
stack< pair<int,int> > s;
void df(int i);
int main()
{
in>>N>>M;
int i,a,b;
for(i=1;i<=M;++i)
{
in>>a>>b;
v[a].pb(b);
v[b].pb(a);
}
df(1);
out<<u<<'\n';
for(i=1;i<=u;++i)
{
for(it=sol[i].begin();it!=sol[i].end();++it)
{
if(af[it->first]!=i)
out<<it->first<<' ',af[it->first]=i;
if(af[it->second]!=i)
out<<it->second<<' ',af[it->second]=i;
}
out<<'\n';
}
//cout<<mm;
}
void df(int i)
{
vector<int> :: iterator it;
viz[i]=1;
niv[i]=niv[t[i]]+1;
l[i]=niv[i];
for(it=v[i].begin();it!=v[i].end();++it)
if(*it!=t[i])
{
//s.push(make_pair(i,*it));
if(viz[*it])
{
if(l[i]>niv[*it])
{
l[i]=niv[*it];
//LINIA URMATOARE E PROBLEMA
s.push(make_pair(i,*it));
//++mm;
}
}
else
{
t[*it]=i;
s.push(make_pair(i,*it));
//++mm;
df(*it);
l[i]= l[*it]<l[i] ? l[*it] : l[i];
if(l[*it]>=niv[i])
{
++u;
while(st.first!=i && st.second!=*it)
{
//cout<<'('<<st.first<<';'<<st.second<<')'<<' ';
sol[u].push_back(st);
s.pop();
}
//cout<<'('<<st.first<<';'<<st.second<<')'<<' ';
sol[u].push_back(st);
s.pop();
//cout<<'\n';
}
}
}
}