Cod sursa(job #3368928)

Utilizator mrvalentynTime Limit Exceeded mrvalentyn Data 16 octombrie 2026 16:33:46
Problema Componente tare conexe Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <bits/stdc++.h>
using namespace std;

const string FILENAME = "ctc";

ifstream f(FILENAME + ".in");
ofstream g(FILENAME + ".out");

#define cin f
#define cout g 

vector<int> gg[100001];
vector<int> gt[100001];
int vz[100001];
vector<int> ans;
void dfs(int curr) {
    vz[curr] = 1;
    for(int node : gg[curr]) {
        if(!vz[node]) dfs(node);
    }

    ans.push_back(curr);


}


void dfs_gt1(int curr) {
    vz[curr] = 1;
    for(int node : gt[curr]) {
        if(!vz[node]) dfs_gt1(node);
    }

    // ans.push_back(curr);


}


void dfs_gt2(int curr) {
    cout << curr << ' ';
    vz[curr] = 1;
    for(int node : gt[curr]) {
        if(!vz[node]) dfs_gt2(node);
    }

    // ans.push_back(curr);


}



int main() {    
    
    int n,m;
    cin >> n >> m;

    for(int i=1;i<=m;++i ) {
        int x,y;
        cin >> x >> y;
        gg[x].push_back(y);
        gt[y].push_back(x);

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


    for(int i=1;i<=n;++i) vz[i] = 0;


    reverse(ans.begin(), ans.end());

    int cnt = 0;

    for(int x : ans) {
        if(!vz[x]) {
            cnt++;
            dfs_gt1(x);
        }
    }

    for(int i=1;i<=n;++i) vz[i] = 0;


    cout << cnt << '\n';
    for(int x : ans) {
        if(!vz[x]) {
            dfs_gt2(x);
            cout << '\n';
        }
    }

    return 0;
}