Pagini recente » Cod sursa (job #1762492) | Cod sursa (job #839714) | Cod sursa (job #1538862) | Cod sursa (job #3250331) | Cod sursa (job #1106721)
#include <fstream>
#include <vector>
#include <queue>
#include <set>
using namespace std;
ifstream fin("biconex.in");
ofstream fout("biconex.out");
vector<int>component[100001];
vector<pair<int,int> > st;
vector<int>g[100001];
bool vis[100001];
int niv[100001], n, m, x, y, k;
void MakeComponents(int x, int father , int level)
{
vis[x]=1;
niv[x]=level;
for(vector<int>::iterator it=g[x].begin(); it<g[x].end(); it++ )
{
if(!vis[*it])
{
st.push_back(make_pair(x,*it));
MakeComponents(*it,x,level+1);
if(niv[*it]>=level)
{
pair<int,int>extract;
do
{
extract=st.back();
st.pop_back();
component[k].push_back(extract.second);
}while(extract.first!=x||extract.second!=*it);
component[k].push_back(extract.first);
k++;
}
}
if(*it!=father)
niv[x]=min(niv[x],niv[*it]);
}
}
int main()
{
fin>>n>>m;
for(int i = 1; i<= m; i++ )
{
fin>>x>>y;
g[x].push_back(y);
g[y].push_back(x);
}
MakeComponents(1,0,1);
fout<<k<<'\n';
for(int i = 0; i< k; i++ )
{
for(vector<int>::iterator it=component[i].begin(); it!=component[i].end(); it++ )
fout<<*it<<' ';
fout<<'\n';
}
fin.close();
fout.close();
return 0;
}