Pagini recente » Cod sursa (job #2061304) | Cod sursa (job #1034021) | Cod sursa (job #2708146) | Cod sursa (job #2637270) | Cod sursa (job #883828)
Cod sursa(job #883828)
#include<fstream>
#include<vector>
#include<algorithm>
#include<stack>
#define NMAX 100005
#define vec G[nod][i]
using namespace std;
int n,m,lev[NMAX],c;
vector<int> G[NMAX],sol[NMAX];
stack<int> s;
int use[NMAX];
void read()
{
ifstream fin("biconex.in");
fin>>n>>m;
int x,y;
for(int i=0;i<m;i++)
{
fin>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
fin.close();
}
void clear(int x,int y)
{
while(s.top()!=y)
{
sol[c].push_back(s.top());
s.pop();
}
sol[c].push_back(y);
sol[c++].push_back(x);
s.pop();
}
void DFS(int nod,int TT)
{
use[nod]=use[TT]+1;
lev[nod]=use[nod];
for(size_t i=0;i<G[nod].size();i++)
if(!use[vec])
{
s.push(vec);
DFS(vec,nod);
lev[nod]=min(lev[nod],lev[vec]);
if(lev[vec]>=use[nod])
clear(nod,vec);
}
else
if(vec!=TT)
lev[nod]=min(lev[nod],lev[vec]);
}
void print()
{
ofstream fout("biconex.out");
fout<<c<<'\n';
for(int i=0;i<c;i++,fout<<'\n')
for(size_t j=0;j<sol[i].size();j++)
fout<<sol[i][j]<<' ';
fout.close();
}
int main()
{
read();
s.push(1);
DFS(1,0);
print();
return 0;
}