Cod sursa(job #2724724)

Utilizator DariusGhercaDarius Gherca DariusGherca Data 17 martie 2021 18:31:24
Problema Componente tare conexe Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("ctc.in");
ofstream g("ctc.out");
const int N=1e5+10;
vector <int> a[N];
vector <int> a_t[N];
vector <int> afis[N];
int n;
bool viz[N];
int nc=0;
stack <int> q;
void dfs(int x)
{
    viz[x]=1;
    for(auto y:a[x])
    {
        if(!viz[y])
        {
            dfs(y);
        }
    }
    q.push(x);
}
void dfs_t(int x)
{
    viz[x]=1;
    for(auto y:a_t[x])
    {
        if(!viz[y])
        {
            afis[nc].push_back(y);
            dfs_t(y);
        }
    }
}
int main()
{
    int m;
    f>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x,y;
        f>>x>>y;
        a[x].push_back(y);
        a_t[y].push_back(x);
    }
    for(int i=1;i<=n;i++)
    {
        if(!viz[i])
        {
            dfs(i);
        }
    }
    for(int i=1;i<=n;i++)
    {
        viz[i]=0;
    }
    while(!q.empty())
    {
        int i=q.top();
        q.pop();
        if(!viz[i])
        {
            nc++;
            afis[nc].push_back(i);
            dfs_t(i);
        }
    }
    g<<nc<<"\n";
    for(int i=1;i<=nc;i++)
    {
        sort(afis[i].begin(),afis[i].end());
        for(auto j:afis[i])
        {
            g<<j<<" ";
        }
        g<<"\n";
    }
    return 0;
}