Cod sursa(job #2676604)

Utilizator KPP17Popescu Paul KPP17 Data 24 noiembrie 2020 17:51:02
Problema Componente biconexe Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#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';
    }
}