Pagini recente » Cod sursa (job #1207902) | Cod sursa (job #2359986) | Cod sursa (job #2730933) | Cod sursa (job #1193760) | Cod sursa (job #2233320)
#include <iostream>
#include <fstream>
#include <vector>
#include <deque>
using namespace std;
ifstream f("biconex.in");
ofstream g("biconex.out");
int n,m, d[100005], l[100005], tata[100005], nr;
vector <int> v[100005], ans[100005];
deque <int> s;
void citire()
{
int i,j,k;
f>>n>>m;
for(k=1; k<=m; k++)
{
f>>i>>j;
v[i].push_back(j);
v[j].push_back(i);
}
}
void dfs(int nod)
{
int i,k, next;
d[nod]=d[tata[nod]]+1;
l[nod]=d[nod];
s.push_front(nod);
for(i=0; i<v[nod].size(); i++)
{next=v[nod][i];
if(!d[next])
{
tata[next]=nod;
dfs(next);
if(l[nod]>l[next])
l[nod]=l[next];
if(l[next]>=d[nod])
{
do
{
k=s[0];
s.pop_front();
ans[nr].push_back(k);
}while(next!=k);
ans[nr].push_back(nod);
nr++;
}
}
else
if(v[nod][i]!=tata[nod])
l[nod]=min(l[nod], d[v[nod][i]]);
}
}
int main()
{
int i,j;
citire();
dfs(1);
g<<nr<<endl;
for(i=0; i<nr; i++)
{for(j=0; j<ans[i].size(); j++)
g<<ans[i][j]<<" ";
g<<endl;}
f.close();
g.close();
return 0;
}