Cod sursa(job #2676590)

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