Cod sursa(job #3151690)

Utilizator TeddyDinutaDinuta Eduard Stefan TeddyDinuta Data 22 septembrie 2023 16:41:00
Problema Componente tare conexe Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("ctc.in");
ofstream out("ctc.out");
int n, m, x, y, c;
int k = 0, st[100005];
vector<int> comp[100005];
int vis[100005];

void dfs(int nod, vector<vector<int>>& adj, int t) {
    vis[nod] = c;

    for (auto it : adj[nod]) {
        if (vis[it] == 0) {
            dfs(it, adj, t);
        }
    }

     if (t == 0)
        st[++k] = nod;
}

int main()
{
    in >> n >> m;
    vector<vector<int>> v(n + 5, vector<int>());
    vector<vector<int>> vt(n + 5, vector<int>());
    for (int i = 1; i <= m; i++) {
        in >> x >> y;
        v[x].push_back(y);
        vt[y].push_back(x);
    }

    c = 1;
    for (int i = 1; i <= n; i++) {
        if (vis[i] == 0) {
            dfs(i, v, 0);
        }
    }

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

    c = 0;
    while (k > 0) {
        if (vis[st[k]] == 0) {
            cout << st[k] << '\n';
            c++;
            dfs(st[k], vt, 1);
        }
        comp[vis[st[k]]].push_back(st[k]);
        k--;
    }

    out << c << '\n';
    for (int i = 1; i <= c; i++) {
        for (auto it : comp[i])
            out << it << " ";
        out << '\n';
    }
    return 0;
}