Cod sursa(job #1977227)

Utilizator Y0da1NUME JMECHER Y0da1 Data 5 mai 2017 09:16:00
Problema Componente tare conexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#include <iostream>
#include <fstream>
#include <stack>
#include <vector>
#include <bitset>
#include <string>
int V, E;

using namespace std;

class nod
{
public:
    vector <int> vecini;
};

nod G [100002];
nod GT [100002];
string afis;
bitset <100002> viz;// [100002];
bitset <100002> viz2;// [100002];
stack <int> S;
void DEFEU (int x)
{
    if (viz[x])
        return;
    int i;
    viz[x]=1;
    for(i=0;i<G[x].vecini.end()- G[x].vecini.begin();++i)
        DEFEU(G[x].vecini[i]);
    S.push(x);
}
void DEFEU2 (int x)
{
    if (viz2[x])
        return;
    //cout << x << " ";
    afis+=to_string(x);
    afis+=" ";
    int i;
    viz2[x]=1;
    for(i=0;i<GT[x].vecini.end()- GT[x].vecini.begin();++i)
        DEFEU2(GT[x].vecini[i]);

}
int main()
{

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

    in>>V>>E;
    int i, x, y, v, nr = 0;

    for(i=0;i<E;++i)
    {
        in>>x>>y;
        G[x].vecini.push_back(y);
        GT[y].vecini.push_back(x);
    }
    //cout<<"CITIRE OK!";
    for(i=1;i<=V;++i)
    {
        if(!viz[i])
            DEFEU(i);
    }
    //cout<<"DEFEU 1";

    while(!S.empty())
        {
            v=S.top();
            //cout<<v<<" ";
            S.pop();
            if(!viz2[v])
            {
                DEFEU2(v);
                //cout<<"\n";
                ++nr;
                afis+="\n";
            }
        }
    out<<nr<<"\n";
    out<<afis;

}