Pagini recente » Cod sursa (job #894609) | Cod sursa (job #1435102) | Cod sursa (job #2549485) | Cod sursa (job #1339889) | Cod sursa (job #2676604)
#include <fstream>
#define fisier "biconex"
std::ifstream in(fisier ".in");
std::ofstream out(fisier ".out");
const int N = 100001;
#include <vector>
#define b back
#define a push_back
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.a(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.a({t}); C.b().b() != f; S.pop_back())
C.b().a(S.b());
}
}
int main()
{
int n, m; in >> n >> m;
while (m--)
{
int a, b; in >> a >> b;
L[a].a(b); L[b].a(a);
}
dfs(1);
out << C.size() << '\n';
for (auto c: C)
{
for (int r: c)
out << r << ' ';
out << '\n';
}
}