Pagini recente » Cod sursa (job #2043333) | Cod sursa (job #2834219) | Cod sursa (job #2580481) | Cod sursa (job #2352803) | Cod sursa (job #2552439)
#include <bits/stdc++.h>
#define mp make_pair
#define NM 100001
using namespace std;
ifstream f("biconex.in");
ofstream g("biconex.out");
int n,m,niv[NM],l[NM];
vector <int> v[NM];
vector <vector<int>> c;
vector <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])
{ niv[*it]=niv[nod]+1;
st.push_back(mp(nod,*it));
DFS(*it);
l[nod]=min(l[nod],l[*it]);
if(niv[nod]<=l[*it])
{ int x=nod,y=(*it);
vector <int> sol;
if(st.size()==1)
{ sol.push_back(st.back().first);
sol.push_back(st.back().second);
st.pop_back();
}
else
{ while(st.back().first!=x || st.back().second!=y)
{ sol.push_back(st.back().second);
st.pop_back();
}
sol.push_back(x);
sol.push_back(y);
st.pop_back();
}
c.push_back(sol);
}
}
else
if(*it!=nod)
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<<c.size()<<'\n';
for(int i=0; i<c.size(); 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;
}