Cod sursa(job #1804095)

Utilizator Bodo171Bogdan Pop Bodo171 Data 12 noiembrie 2016 11:10:30
Problema Componente tare conexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include<fstream>
#include<vector>
using namespace std;
const int nmax=100005;
vector<int> v[nmax],vt[nmax],ctc[nmax];
int postordine[nmax];
bool viz[nmax];
int i,j,n,m,k,a,b,rasp,ind,x;
void dfs(int x)
{
    viz[x]=1;
    for(int i=0;i<v[x].size();i++)
        if(!viz[v[x][i]])
          dfs(v[x][i]);
    k++;postordine[k]=x;
}
void dfst(int x)
{
    viz[x]=0;ctc[rasp].push_back(x);
    for(int i=0;i<vt[x].size();i++)
        if(viz[vt[x][i]])
         dfst(vt[x][i]);
}
int main()
{
    ifstream f("ctc.in");
    ofstream g("ctc.out");
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>a>>b;
        v[a].push_back(b);
        vt[b].push_back(a);
    }
    for(ind=1;ind<=n;ind++)
    {
        if(!viz[ind])
            dfs(ind);
    }
    for(ind=n;ind>=1;ind--)
    {
        x=postordine[ind];
        if(viz[x])
            {rasp++;dfst(x);}
    }
    g<<rasp<<'\n';
    for(i=1;i<=rasp;i++)
    {
        for(j=0;j<ctc[i].size();j++)
            g<<ctc[i][j]<<' ';
        g<<'\n';
    }
    return 0;
}