Cod sursa(job #3289363)

Utilizator mariusharabariMarius Harabari mariusharabari Data 26 martie 2025 16:32:39
Problema Componente tare conexe Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("ctc.in");
ofstream fout("ctc.out");

vector <vector <int>> g, gt, e;
bitset <100005> viz;
stack <int> q;
int n, m;

void dfs(int nod){
    viz[nod]=1;
    for(int next:g[nod])
        if(!viz[next])
            dfs(next);
    q.push(nod);
}

void dfst(int nod, int tag){
    viz[nod]=1;
    e[tag-1].push_back(nod);
    for(int next:gt[nod])
        if(!viz[next])
            dfst(next, tag);
}

int main(){
    fin>>n>>m;
    g.assign(n+1, vector<int>());
    gt.assign(n+1, vector<int>());
    int a, b;
    for(int i=1;i<=m;i++){
        fin>>a>>b;
        g[a].push_back(b);
        gt[b].push_back(a);
    }

    for(int i=1;i<=n;i++)
        if(!viz[i])
            dfs(i);

    viz.reset();

    int cc=0;
    while(!q.empty()){
        int nod=q.top();
        q.pop();
        if(!viz[nod]){
            e.push_back(vector<int>());
            cc++;
            dfst(nod, cc);
        }
    }
    fout<<cc<<endl;
    for(int i=0;i<cc;i++){
        for(int j:e[i])
            fout<<j<<' ';
        fout<<endl;
    }
    return 0;
}