Cod sursa(job #3142694)

Utilizator Mihai_OctMihai Octavian Mihai_Oct Data 23 iulie 2023 14:44:49
Problema Componente tare conexe Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("retele.in");
ofstream fout("retele.out");
int n, m, i, j, x, y, g[100002];
bool a[100002][100002];
queue<int> q[100002];
bitset<100002> fr1, fr2;

static inline void parc1(int x) {
    fr1[x] = 1;
    for(int i = 1; i <= n; i++) {
        if(a[x][i] && !fr1[i]) parc1(i);
    }
}

static inline void parc2(int x) {
    fr2[x] = 1;
    for(int i = 1; i <= n; i++) {
        if(a[i][x] && !fr2[i]) parc2(i);
    }
}

int main() {
    fin >> n >> m;
    for(i = 1; i <= m; i++) {
        fin >> x >> y;
        a[x][y] = true;
    }
    x = 0;
    for(i = 1; i <= n; i++) {
        if(!g[i]) {
            fr1 = fr2 = 0;
            parc1(i);
            parc2(i);

            x++;
            for(j = 1; j <= n; j++) {
                if(fr1[j] && fr2[j]) g[j] = x;
            }
        }
    }
    fout << x << "\n";
    for(i = 1; i <= n; i++) q[g[i]].push(i);
    for(i = 1; i <= x; i++) {
        fout << q[i].size() << " ";
        while(!q[i].empty()) {
            fout << q[i].front() << " ";
            q[i].pop();
        }
        fout << "\n";
    }

    return 0;
}