Cod sursa(job #3289358)

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

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

vector <vector <int>> g, gt;
vector <int> 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[nod]=tag;
    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>());
    e.assign(n+1,0);
    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]){
            cc++;
            dfst(nod, cc);
        }
    }
    fout<<cc<<endl;
    for(int i=1;i<=cc;i++){
        for(int j=1;j<=n;j++)
            if(e[j]==i)
                fout<<j<<' ';
        fout<<endl;
    }
    return 0;
}