Cod sursa(job #3156480)

Utilizator alexdumitruAlexandru Dumitru alexdumitru Data 11 octombrie 2023 17:34:47
Problema Componente tare conexe Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 15;

int n, m;
vector<int> g1[NMAX], g2[NMAX];
bool vis[NMAX];
vector<int> v;

void dfs1(int nod)
{
    vis[nod] = 1;
    for(auto it : g1[nod])
        if(!vis[it])
            dfs1(it);
    v.push_back(nod);
}

vector<vector<int>> ans;
vector<int> comp;

void dfs2(int nod)
{
    vis[nod] = 1;
    comp.push_back(nod);
    for(auto it : g2[nod])
        if(!vis[it])
            dfs2(it);
}

void solve()
{
    fin >> n >> m;
    for(int i = 1; i <= m; i++)
    {
        int u, v;
        fin >> u >> v;
        g1[u].push_back(v);
        g2[v].push_back(u);
    }
    for(int i = 1; i <= n; i++)
        if(!vis[i])
            dfs1(i);
    memset(vis, 0, sizeof(vis));
    while(!v.empty())
    {
        int nod = v.back();
        v.pop_back();
        if(vis[nod])
            continue;
        comp.clear();
        dfs2(nod);
        ans.push_back(comp);
    }
    fout << ans.size() << '\n';
    for(auto it : ans)
    {
        for(auto x : it)
            fout << x << ' ';
        fout << '\n';
    }
}

int main()
{
    solve();
    return 0;
}