Cod sursa(job #1735880)

Utilizator Bodo171Bogdan Pop Bodo171 Data 31 iulie 2016 14:55:44
Problema Componente tare conexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include<fstream>
#include<vector>
#include<bitset>
using namespace std;
const int nmax=100005;
vector<int> v[nmax],vt[nmax],solutie[nmax];
bitset<nmax> viz;
int postordine[nmax],i,n,m,x,y,ctc,j,k;
void dfs(int x)
{
    viz[x]=1;
    for(int cnt=0;cnt<v[x].size();cnt++)
    {
        if(!viz[v[x][cnt]])
            {dfs(v[x][cnt]);}
    }
    k++;postordine[k]=x;
}
void dfst(int x)
{
    viz[x]=0;solutie[ctc].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>>x>>y;
        v[x].push_back(y);
        vt[y].push_back(x);
    }
    for(j=1;j<=n;j++)
        if(!viz[j])
         dfs(j);
    for(j=n;j>=1;j--)
        if(viz[postordine[j]])
         ctc++,dfst(postordine[j]);
    g<<ctc<<'\n';
    for(i=1;i<=ctc;i++)
    {
        for(j=0;j<solutie[i].size();j++)
            g<<solutie[i][j]<<' ';
        g<<'\n';
    }
    return 0;
}