Pagini recente » preoni2007_runda2_10 | Cod sursa (job #2053946) | Cod sursa (job #706670) | Istoria paginii runda/tabaraichb/clasament | Cod sursa (job #1689990)
#include <bits/stdc++.h>
using namespace std;
#ifdef INFOARENA
#define cout fout
ifstream fin("biconex.in");
ofstream fout("biconex.out");
#else
ifstream fin("date.in");
#endif // INFOARENA
/// ///////////////////////////////////////////
void read();
#define nmax 100010
#define inf 0x3f3f3f3f
vector<int> G[nmax],G_t[nmax];
vector<vector<int>> ctc;
bool viz[nmax];
int st[nmax],n,low[nmax],lev[nmax];
void dfs(int nod,int fat,int level)
{
low[nod]=level;
lev[nod]=level;
viz[nod]=1;
st[++st[0]]=nod;
for(auto vec:G[nod])
{
if(vec==fat) continue;
if(viz[vec]) low[nod]=min(low[nod],lev[vec]);
else
{
dfs(vec,nod,level+1);
low[nod]=min(low[nod],low[vec]);
if(low[vec]>=level)
{
ctc.push_back(vector<int>());
for(; st[st[0]]!=nod; --st[0])
ctc.back().push_back(st[st[0]]);
ctc.back().push_back(nod);
}
}
}
}
int main()
{
read();
dfs(1,0,1);
cout<<ctc.size()<<'\n';
for(auto &comp:ctc)
{
for(auto &it:comp) cout<<it<<' ';
cout<<'\n';
}
}
void read()
{
int x,y,c,m;
fin>>n>>m;
for(; m; --m)
{
fin>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
}