Cod sursa(job #840970)

Utilizator FayedStratulat Alexandru Fayed Data 23 decembrie 2012 16:26:52
Problema Componente tare conexe Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <fstream>
#include <vector>
using namespace std;

vector <int> V[100005],Vt[100005];
int n,m,nrc,x,y;
int succesor[100005], predecesor[100005];

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

void dfs1(int nod){

succesor[nod] = nrc;
    for(vector<int>::iterator it = V[nod].begin();it!=V[nod].end();it++){
        if(!succesor[(*it)])
            dfs1(*it);
 }
}

void dfs2(int nod){

predecesor[nod] = nrc;
    for(vector<int>::iterator it = Vt[nod].begin();it != Vt[nod].end();it++)
            if(!predecesor[(*it)])
               dfs2(*it);

}

int main(){

f >> n >> m;
    for(int i=1;i<=m;i++){
        f >> x >> y;
        V[x].push_back(y);
        Vt[y].push_back(x);
}

 nrc = 1;

for(int i=1;i<=n;i++)
    if(!succesor[i]){
        succesor[i] = nrc;
            dfs1(i);    dfs2(i);
                for(int j=1;j<=n;j++)
                    if(succesor[j] != predecesor[j])
                        succesor[j] = predecesor[j] = 0;
                            nrc++;
    }

g << nrc -1 << '\n';
 for(int i=1;i<nrc;i++){
    for(int j=1;j<=n;j++){
        if(i == succesor[j])
            g << j << " ";
    }
        g << '\n';
}

f.close();
g.close();
return 0;
}