Cod sursa(job #1962192)

Utilizator Diana421Talpos Diana Diana421 Data 11 aprilie 2017 17:05:47
Problema Componente tare conexe Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>

using namespace std;

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

short n,m,a[5000][5000],viz1[5000],viz2[5000];

void citire()
{
    f>>n>>m;
    for(short i=1;i<=m;i++)
    {
        short x,y;
        f>>x>>y;
        a[x][y]=1;
    }
}

void dfs1(int x,int cont)
{
    viz1[x]=cont;
    for(int i=1;i<=n;i++)
        if(i!=x&&viz1[i]==0)
            if(a[x][i]==1) dfs1(i,cont);
}

void dfs2 (int x, int cont)
{
    viz2[x]=cont;
    for(short i=1;i<=n;i++)
        if(i!=x && viz2[i]==0)
            if(a[i][x]==1)
                dfs2(i,cont);

}

void ctc()
{
    int cont=1;
    for(short i=1;i<=n;i++)
        if(viz1[i]==0)
        {
            dfs1(i,cont);
            dfs2(i,cont);
            for(short j=1;j<=n;j++)
                if(viz1[j]!=viz2[j]) viz1[j]=viz2[j]=0;
                cont++;
        }
        g<<cont-1<<endl;
        for(short i=1;i<=cont;i++,g<<endl)
        {
            int nr=0;
            for(short j=1;j<=n;j++)
                if(viz1[j]==i)
                {
                    g<<j<<" ";nr++;
                }
        }

}
int main()
{
    citire();
    ctc();
    return 0;
}