Cod sursa(job #2909693)

Utilizator _andrei4567Stan Andrei _andrei4567 Data 14 iunie 2022 18:28:02
Problema Componente tare conexe Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <vector>
#include <bitset>
#include <algorithm>
#pragma optimize GCC ("Ofast")

using namespace std;

ifstream cin ("ctc.in");
ofstream cout ("ctc.out");

const int N = 1e5;

int ctc[N + 1];

bitset <N + 1> vis;

vector <int> g[N + 1], gback[N + 1], sol[N + 1];

vector <int> nou;

int n, m, nrctc, a, b;

void dfsplus (int nod)
{
    vis[nod] = 1;
    for (auto it : g[nod])
        if (!vis[it])
            dfsplus(it);
    nou.push_back(nod);
}
void dfsminus (int nod)
{
    ctc[nod] = nrctc;
    for (auto it : gback[nod])
        if (!ctc[it])
            dfsminus(it);
}

int main()
{
    for (cin >> n >> m; m; --m)
    {
        cin >> a >> b;
        g[a].push_back(b);
        gback[b].push_back(a);
    }
    for (int i = 1; i <= n; ++i)
        if (!vis[i])
            dfsplus(i);
    reverse (nou.begin(), nou.end());
    for (auto it : nou)
        if (!ctc[it])
            ++nrctc, dfsminus(it);
    cout << nrctc << '\n';
    for (int i = 1; i <= n; ++i)
        sol[ctc[i]].push_back(i);
    for (int i = 1; i <= nrctc; ++i, cout << '\n')
        for (auto it : sol[i])
            cout << it << ' ';
    return 0;
}