Cod sursa(job #3268638)

Utilizator MilitaruMihaiMihaiMIlitaru MilitaruMihai Data 16 ianuarie 2025 16:27:06
Problema Componente tare conexe Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
vector <int> v[100005],s,vrev[100005];
vector <int> ans[100005];
int n,m,d[100005],drev[100005],nr;
void dfs(int nod)
{
    d[nod]=1;
    for (int i : v[nod])
    {
        if (!d[i])
        {
            dfs(i);
        }
    }
    s.push_back(nod);
}
void dfsrev(int nod)
{
    drev[nod]=1;
    //cout<<nod<<"ajutor\n";
    for (int i : vrev[nod])
    {
        //cout<<nod<<' '<<i<<'\n';
        if (!drev[i])
            dfsrev(i);
    }
    ans[nr].push_back(nod);
}
int main()
{
    fin>>n>>m;
    for (int i=1;i<=m;i++)
    {
        int a,b;
        fin>>a>>b;
        v[a].push_back(b);
        vrev[b].push_back(a);
    }
    for (int i=1;i<=n;i++)
    {
        if (!d[i])
        {
            //d[i]=1;
            dfs(i);
        }
    }
    reverse(s.begin(),s.end());
    for (int i : s)
    {
        if (!drev[i])
        {
            nr++;
            dfsrev(i);
        }
    }
    fout<<nr<<'\n';
    for (int i=1;i<=nr;i++,fout<<'\n')
        for (int j : ans[i])
            fout<<j<<' ';
    return 0;
}