Pagini recente » Cod sursa (job #2893527) | Cod sursa (job #2985557) | Cod sursa (job #3190876) | Cod sursa (job #1718092) | Cod sursa (job #950914)
Cod sursa(job #950914)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <stack>
#define lmax 110000
using namespace std;
int n,m,lev[lmax],c;
vector<int> G[lmax],sol[lmax];
stack<int> s;
int use[lmax];
void sp(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 df(int a, int t)
{
use[a]=use[t]+1;
lev[a]=use[a];
for(int i=0;i<G[a].size();i++)
{
if(!use[G[a][i]])
{
s.push(G[a][i]);
df(G[a][i],a);
lev[a]=min(lev[a],lev[G[a][i]]);
if(lev[G[a][i]]>=use[a])
{
sp(a,G[a][i]);
}
}
else
{
if(G[a][i]!=t)
{
lev[a]=min(lev[a],lev[G[a][i]]);
}
}
}
}
int main()
{
ifstream f("biconex.in");
ofstream g("biconex.out");
f>>n>>m;
int x,y;
for(int i=0;i<m;i++)
{
f>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
s.push(1);
df(1,0);
g<<c<<'\n';
for(int i=0;i<c;i++,g<<'\n')
for(int j=0;j<sol[i].size();j++)
g<<sol[i][j]<<' ';
f.close();
g.close();
}