Pagini recente » Cod sursa (job #2939227) | Cod sursa (job #1783605) | Cod sursa (job #2319473) | Cod sursa (job #2602014) | Cod sursa (job #1392683)
#include <fstream>
#include<vector>
#include<stack>
#include<iostream>
using namespace std;
ifstream fin("biconex.in");
ofstream fout("biconex.out");
int n,j,m,i,a,b;
vector<int> v[100010];
int niv[100010],nivmin[100010];
stack<int>st;
vector<vector<int> > sol;
int vizitat[100010];
void dfs(int k)
{
vector<int>::iterator it;
int aux;
vizitat[k]=1;
st.push(k);
cout<<st.top();
nivmin[k]=niv[k];
for(it=v[k].begin();it!=v[k].end();++it)
{
if(vizitat[*it]==0)
{
niv[*it]=niv[k]+1;
dfs(*it);
if(nivmin[*it]>=niv[k])//solutie
{
sol.push_back(vector<int>());
while(true)
{
aux=st.top();
sol.back().push_back(aux);
st.pop();
if(aux==*it) // componenta pana cand apare nodul *it
break;
}
sol.back().push_back(k);
}
}
if(niv[*it]<niv[k]) //de jos in sus
nivmin[k]=min(nivmin[k],niv[*it]);
else //de sus in jos
nivmin[k]=min(nivmin[k],nivmin[*it]);
}
}
int main()
{
fin>>n>>m;
for(i=1;i<=m;++i)
{
fin>>a>>b;
v[a].push_back(b);
v[b].push_back(a);
}
dfs(1);
fout<<sol.size()<<'\n';
for(i=0;i<sol.size();++i,fout<<'\n')
for(j=0;j<sol[i].size();++j)
fout<<sol[i][j]<<" ";
return 0;
}