Pagini recente » Cod sursa (job #2381896) | Cod sursa (job #519163) | Cod sursa (job #2411021) | Cod sursa (job #478240) | Cod sursa (job #2641534)
#include <iostream>
#include <fstream>
#include <stack>
#include <vector>
using namespace std;
ifstream in ("biconex.in");
ofstream out("biconex.out");
int n, m, x, y;
vector <int> vecini[100002];
vector < vector <int> > sol;
int height[100002];
int minHeight[100002];
stack <int> stk;
void dfs(int nod, int level){
minHeight[nod]=height[nod]=level;
stk.push(nod);
for(auto &x:vecini[nod]){
if(!height[x]){
dfs(x, level+1);
minHeight[nod]=min(minHeight[nod], minHeight[x]);
if(minHeight[x]>=height[nod]){
vector <int> act;
int t;
do{
t=stk.top();
stk.pop();
act.push_back(t);
}while(t!=x);
act.push_back(nod);
sol.push_back(act);
}
}
else if(height[x]!=height[nod]-1){
minHeight[nod]=min(minHeight[nod], height[x]);
}
}
}
int main()
{
in>>n>>m;
for(int i=1; i<=m; i++){
in>>x>>y;
vecini[x].push_back(y);
vecini[y].push_back(x);
}
dfs(1, 1);
out<<sol.size()<<"\n";
for(auto & vec:sol){
for(auto & x:vec)
out<<x<<" ";
out<<"\n";
}
return 0;
}