Cod sursa(job #2272025)

Utilizator lucaperjuLuca Perju Verzotti lucaperju Data 29 octombrie 2018 16:56:53
Problema Componente tare conexe Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("ctc.in");
ofstream cout ("ctc.out");
vector <int> v[100003];
vector <int> vv[100003];
vector <int> vvv[100003];
int n,m,viz[100003],rez[100003],k=0;
void citire ()
{
    int i,a,b,j;
    cin>>n>>m;
        for(j=1; j<=m; ++j)
        {
            cin>>a>>b;
            v[a].push_back(b);
            vv[b].push_back(a);
        }
}
void dfs (int poz)
{
    viz[poz]=1;
    int i,nn;
    for(i=0;i<v[poz].size();++i)
    {
        nn=v[poz][i];
        if(!viz[nn])
            dfs(nn);
    }
    rez[++k]=poz;
}
void cazanelu (int poz)
{
    int i,nn;
    viz[poz]=2;
    vvv[k].push_back(poz);
    for(i=0;i<vv[poz].size();++i)
    {
        nn=vv[poz][i];
        if(viz[nn]!=2)
            cazanelu(nn);
    }
}
int main()
{
    int i,j;
    citire();
    for(i=1;i<=n;++i)
    {
        if(!viz[i])
            dfs(i);
    }
    k=0;
    for(i=n;i>=1;--i)
    {
        int delimanu=rez[i]; /// ca zan zan zan ca zan zan zan buri buri buri buri ca zan zan zan ca zan zan zan buri buri buri buri piperneaa
        if(viz[delimanu]==2)
            continue;
        ++k;
        cazanelu(delimanu);/// contu' mic.... stii ce zic! :)
    }
    cout<<k<<'\n';
    for(i=1;i<=k;++i)
    {
        for(j=0;j<vvv[i].size();++j)
            cout<<vvv[i][j]<<' ';
        cout<<'\n';
    }
    return 0;
}