Pagini recente » Cod sursa (job #2654683) | Cod sursa (job #460369) | Cod sursa (job #597542) | Cod sursa (job #1977422) | Cod sursa (job #2527149)
#include<fstream>
#include<vector>
#include<deque>
using namespace std;
ifstream fi("biconex.in");
ofstream fo("biconex.out");
int nrb;
int Niv[100005],Low[100005];
vector<int> A[100005],B[100005];
deque<pair<int,int> > S;
void dfs(int nod, int p, int niv)
{
Niv[nod]=niv;
Low[nod]=niv;
for(auto other:A[nod])
{
if(other==p)
continue;
if(Niv[other]==0)
{
S.push_back({nod,other});
dfs(other,nod,niv+1);
Low[nod]=min(Low[nod],Low[other]);
if(Low[other]>=Niv[nod])
{
nrb++;
while(1)
{
int aux=S.back().first;
B[nrb].push_back(S.back().second);
S.pop_back();
if(aux==nod)
break;
}
B[nrb].push_back(nod);
}
}
else
Low[nod]=min(Low[nod],Niv[other]);
}
}
int main()
{
int n,m;
fi>>n>>m;
for(int i=1; i<=m; i++)
{
int x,y;
fi>>x>>y;
A[x].push_back(y);
A[y].push_back(x);
}
dfs(1,0,1);
fo<<nrb<<"\n";
for(int i=1; i<=nrb; i++)
{
for(auto x:B[i])
fo<<x<<" ";
fo<<"\n";
}
fi.close();
fo.close();
return 0;
}