Pagini recente » Cod sursa (job #2534257) | Cod sursa (job #2499220) | Cod sursa (job #265083) | Cod sursa (job #2182755) | Cod sursa (job #2396560)
#include <iostream>
#include <fstream>
#include <stack>
#include <vector>
using namespace std;
int n,m,nr;
vector<int>g[100003];
stack<int>s;
vector<int>sol[100003];
int niv[100003],llk[100003];
void citire()
{
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);
}
}
void dfs(int vf,int tata)
{
niv[vf]=niv[tata]+1;
s.push(vf);
llk[vf]=niv[vf];
for(auto &fiu:g[vf])
{
if(fiu==tata)
continue;
if(niv[fiu])
{
if(llk[vf]>niv[fiu])
llk[vf]=niv[fiu];
continue;
}
dfs(fiu,vf);
if(llk[vf]>llk[fiu])
llk[vf]=llk[fiu];
if(niv[vf]<=llk[fiu])
{
int x;
sol[nr].push_back(vf);
sol[nr].push_back(fiu);
while(!s.empty()&&s.top()!=fiu)
{
sol[nr].push_back(s.top());
s.pop();
}
nr++;
}
}
}
void afisare()
{
ofstream fout("biconex.out");
fout<<nr<<"\n";
for(int i=0;i<nr;i++)
{
for(auto &j:sol[i])
fout<<j<<" ";
fout<<"\n";
}
}
int main()
{
citire();
dfs(1,0);
afisare();
return 0;
}