Cod sursa(job #2764544)

Utilizator SabailaCalinSabaila Calin SabailaCalin Data 21 iulie 2021 15:45:14
Problema Componente tare conexe Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream f ("ctc.in");
ofstream g ("ctc.out");

vector<vector<int> > G, GT;
vector<vector<int>> vec;

int n , m , contor , nrs;

vector<bool> V;
vector<int> S;

void read()
{
    f >> n >> m;
    G = GT = vec = vector<vector<int>>(n + 1);
    for(int i = 1 ; i <= m ; i++)
    {
        int a , b;
        f >> a >> b;
        G[a].push_back(b);
        GT[b].push_back(a);
    }

}

void dfs(int k)
{
    V[k] = true;
    for(auto x : G[k])
        if(!V[x])
            dfs(x);
    S.push_back(k);
}

void dfsGT(int k)
{
    V[k]=1;
    vec[contor].push_back(k);
    for(auto x: GT[k])
        if(! V[x])
            dfsGT(x);

}

int main()
{
    read();

    V = vector<bool> (n + 1, false);
    for(int i = 1 ; i <= n ; i ++)
        if(! V[i])
            dfs(i);

    V = vector<bool> (n + 1, false);
    for(vector<int>::reverse_iterator it = S.rbegin() ; it != S.rend() ; it ++)
        if(!V[*it]) {
                contor ++;
                dfsGT(*it);
        }

    g<<contor << endl;
    for (int i = 1; i <= contor; i++)
    {
        for (int j = 0; j < vec[i].size(); j++)
        {
            g << vec[i][j] << " ";
        }
        g << endl;
    }
    return 0;
}