Pagini recente » Cod sursa (job #1356428) | Cod sursa (job #278842) | Cod sursa (job #2298035) | Cod sursa (job #129951) | Cod sursa (job #2808930)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("biconex.in");
ofstream fout("biconex.out");
const int NMAX = 1e5;
vector <int> g[NMAX + 5];
int low[NMAX + 5], d[NMAX + 5];
bool vis[NMAX + 5];
int k = 0;
vector <int> bi[NMAX + 5];
stack <int> st;
void dfs(int u, int depth) {
vis[u] = true;
low[u] = d[u] = depth;
st.push(u);
for(int adj : g[u]) {
if(vis[adj]) low[u] = min(low[u], d[adj]);
else {
dfs(adj, depth + 1);
low[u] = min(low[u], low[adj]);
if(low[adj] >= d[u]) {
bi[++k] = {u};
int x;
do {
x = st.top();
st.pop();
bi[k].push_back(x);
} while(x != adj);
}
}
}
}
int main()
{
int n, m, u, v;
fin >> n >> m;
for(int i = 1; i <= m; i++) {
fin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
dfs(1, 0);
fout << k << "\n";
for(int i = 1; i <= k; i++, fout << "\n")
for(int x : bi[i])
fout << x << " ";
return 0;
}