Cod sursa(job #3274345)

Utilizator sorananeculaed@gmail.comNeculaes Sorana [email protected] Data 6 februarie 2025 14:05:33
Problema Componente tare conexe Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include<vector>
#include<stack>

using namespace std;
ifstream cin("ctc.in");
ofstream cout("ctc.out");
const int N_MAX = 200000;
vector<int>g[N_MAX];vector<int>gt[N_MAX];
vector<vector<int>> ctc;
int ver[N_MAX];

int n,m,x,y;
stack<int> s;
void dfs(int node) {
    if(ver[node]) return;
    ver[node]=1;
    for(int i=0;i<g[node].size();i++) {
        dfs(g[node][i]);
    }
    s.push(node);
}
void dfs2(int node, vector<int>& v) {
    if(ver[node]) return;
    ver[node]=1;
    v.push_back(node);
    for(int i=0;i<gt[node].size();i++) {
        dfs2(gt[node][i],v);
    }
}
int main(){
    cin>>n>>m;
    for(int i=0;i<m;i++) {
        cin>>x>>y;
        g[x].push_back(y);
        gt[y].push_back(x);
    }
    for(int i=1;i<=n;i++) {
        dfs(i);
    }
    for(int i=1;i<=n;i++)
        ver[i] = 0;
    while(!s.empty() ) {
        int node = s.top();
        s.pop();
        if(!ver[node]) {
            vector<int> h;
            dfs2(node,h);
            ctc.push_back(h);
        }
    }
    cout<<ctc.size()<<'\n';
    for(int i=0;i<ctc.size();i++) {
        for(int j=0;j<ctc[i].size();j++)
            cout<<ctc[i][j]<<' ';
        cout<<endl;
    }
}