Pagini recente » Cod sursa (job #3137333) | Cod sursa (job #646479) | Cod sursa (job #188460) | Cod sursa (job #871383) | Cod sursa (job #2676590)
#include <fstream>
#define fisier "biconex"
std::ifstream in(fisier ".in");
std::ofstream out(fisier ".out");
const int N = 100000;
#include <vector>
std::vector<int> L[N], S;
std::vector<std::vector<int>> C;
int T[N], I[N], O[N], nI;
void dfs(int t)
{
I[t] = O[t] = ++nI;
S.push_back(t);
for (int f: L[t])
if (f != T[t])
if (I[f])
O[t] = std::min(O[t], I[f]);
else
{
T[f] = t;
dfs(f);
O[t] = std::min(O[t], O[f]);
if (I[t] <= O[f])
for (C.push_back({t}); C.back().back() != f; S.pop_back())
C.back().push_back(S.back());
}
}
int main()
{
int n, m; in >> n >> m;
while (m--)
{
int a, b; in >> a >> b;
L[--a].push_back(--b);
L[b].push_back(a);
}
dfs(0);
out << C.size() << '\n';
for (auto c: C)
{
for (int r: c)
out << r + 1 << ' ';
out << '\n';
}
}