Pagini recente » Cod sursa (job #2979667) | Cod sursa (job #3208387) | Cod sursa (job #3205728) | Cod sursa (job #778028) | Cod sursa (job #3292332)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("biconex.in");
ofstream fout("biconex.out");
int n, m, i, j, x, y, niv[100002], mi[100002];
vector<int> gr[100002];
bool fr[100002];
stack<int> st;
vector<vector<int>> rasp;
static inline void Dfs(int nod, int tata = 0) {
fr[nod] = true;
st.push(nod);
niv[nod] = mi[nod] = niv[tata] + 1;
for(int urm : gr[nod]) {
if(urm != tata) {
if(fr[urm]) mi[nod] = min(mi[nod], niv[urm]);
else {
Dfs(urm, nod);
mi[nod] = min(mi[nod], mi[urm]);
if(niv[nod] <= mi[urm]) {
rasp.push_back({});
while(st.top() != urm) {
rasp.back().push_back(st.top());
st.pop();
}
st.pop();
rasp.back().push_back(urm);
rasp.back().push_back(nod);
}
}
}
}
}
int main() {
fin >> n >> m;
for(i = 1; i <= m; i++) {
fin >> x >> y;
gr[x].push_back(y);
gr[y].push_back(x);
}
for(i = 1; i <= n; i++) {
if(!fr[i]) Dfs(i);
}
fout << rasp.size() << "\n";
for(vector<int>& vCur : rasp) {
for(int cur : vCur) fout << cur << " ";
fout << "\n";
}
return 0;
}