Cod sursa(job #1250065)

Utilizator andreea.ciobanuCiobanu Andreea andreea.ciobanu Data 27 octombrie 2014 19:44:08
Problema Componente tare conexe Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <fstream>
#define NMAX 1000

using namespace std;

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

int uz[NMAX],d[NMAX][NMAX],a[NMAX][NMAX], c[NMAX];
int n, m, comp;

void citire();
void afisare();
void mdrumuri();
void idee_1(int x);
void afisare();

int main()
{
    int i;
    citire();
    mdrumuri();
    for(i=1;i<=n;i++)
        if(uz[i]==0)
            {
            comp++;
            c[i]=comp;
            idee_1(i);
            }
    afisare();
    return 0;
}

void citire()
{
    int x,y,i;
    fin>>n>>m;
    for(i=1; i<=m; i++)
        {
        fin>>x>>y;
        a[x][y]=d[x][y]=1;
        d[i][i]=1;
        }
}
void mdrumuri()
{
    int i,j,k;
    for(k=1; k<=n; k++)
        for(i=1; i<=n; i++)
            for(j=1; j<=n; j++)
                if(!d[i][j])
                    d[i][j]=d[i][k]&&d[k][j];
}
void idee_1(int x)
{
    int i,j;
    uz[x]=1;
    for(i=1;i<=n;i++)
        if(x!=i)
            if(!uz[i]&&(d[x][i]&&d[i][x]))
                {
                uz[i]=1;
                c[i]=comp;
                }
}
void afisare()
{
    int i, j;
    fout<<comp<<'\n';
    for (i=1; i<=comp; i++)
        {
        for(j=1; j<=n; j++)
            if (c[j]==i)
                fout<<j<<' ';
        fout<<'\n';
        }
}