Cod sursa(job #2103385)

Utilizator TudorFinaruTudor Cristian Finaru TudorFinaru Data 10 ianuarie 2018 09:26:54
Problema Componente tare conexe Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
using namespace std;
ifstream f("ctc.in");
ofstream g("ctc.out");
int a[102][102],n,m,x,y,viz[102],nr;

void roy_floyd()
{
    int i, j, k;
    for (k=1;k<=n;k++)
        for (i=1;i<=n;i++)
            for (j=1;j<=n; j++)
                if (a[i][k] && a[k][j] && (a[i][j] > a[i][k] + a[k][j] || !a[i][j]) && i != j) a[i][j] = a[i][k] + a[k][j];
}


void dfs(int nod)
{
    int jj;
    viz[nod]=1;
    for(jj=1;jj<=n;jj++)
        if(a[nod][jj]&& a[jj][nod] && viz[jj]==0)
            dfs(jj);
}


void dfs2(int nod)
{
    g<<nod<<' ';
    int jj;
    viz[nod]=1;
    for(jj=1;jj<=n;jj++)
        if(a[nod][jj] && a[jj][nod]&& viz[jj]==0)
            dfs2(jj);
}

int main()
{
    int i,j;
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>x>>y;
        a[x][y]=1;
    }
    roy_floyd();
    for(i=1;i<=n;i++)
        if(!viz[i])
        {
            nr++;
            dfs(i);
        }
    g<<nr<<'\n';

    for(i=1;i<=n;i++) viz[i]=0;

    for(i=1;i<=n;i++)
        if(!viz[i]){
            dfs2(i); g<<'\n';}
    f.close();
    g.close();
    return 0;
}