Cod sursa(job #2173700)

Utilizator dragosmdvMoldovan Dragos dragosmdv Data 15 martie 2018 23:48:01
Problema Componente tare conexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>

using namespace std;

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


int n, m,num, freq[100001];
stack <int> st;
vector<int> v[100001];
vector<int> vt[100001];
vector<int> sol[100001];
int a, b;


void dfs(int nod)
{
    freq[nod]=1;
    for(int i=0; i<v[nod].size(); i++)
        if(freq[v[nod][i]]==0)
            dfs(v[nod][i]);

    st.push(nod);
}

void dfst(int nod)
{
    freq[nod]=2;
    sol[num].push_back(nod);
    for(int i=0; i<vt[nod].size(); i++)
        if(freq[vt[nod][i]]==1)
            dfst(vt[nod][i]);

}



int main()
{
    //cout<<sizeof(v)/1024;
    fin>>n>>m;
    for(int i=1; i<=m; i++)
    {
        fin>>a>>b;
        v[a].push_back(b);
        vt[b].push_back(a);
    }

    for(int i=1; i<=n; i++)
        if(freq[i]==0)
            dfs(i);

    while(!st.empty())
    {
        if(freq[st.top()]==1)
        {
            dfst(st.top());
            num++;
        }


        st.pop();
    }
    fout<<num<<'\n';
    for(int i=0; i<num; i++)
    {

        for(int j=0; j<sol[i].size(); j++)
            fout<<sol[i][j]<<" ";
        fout<<'\n';
    }

    return 0;
}