Cod sursa(job #948176)

Utilizator vasandANDREI POP vasand Data 9 mai 2013 16:46:39
Problema Componente tare conexe Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.72 kb
# include <iostream>
# include <fstream>
# include <stdlib.h>
# define nmax 100000;
using namespace std;

fstream f("ctc.in",ios::in);
fstream g("ctc.out",ios::out);

int n,m,*a[nmax],*at[nmax],v[nmax],nr;

void init()
{
    int i;
    for(i=1; i<=n; i++)
    {
        a[i]=(int *) realloc(a[i], sizeof(int));
        a[i][0]=0;
        at[i]=(int *) realloc(at[i], sizeof(int));
        at[i][0]=0;
    }
}


void citire()
{
    int x,y,i;
    f>>n>>m;
    init();
    for(i=1; i<=m; i++)
    {
        f>>x>>y;
        a[x][0]++;
        a[x]=(int *) realloc(a[x], (a[x][0]+1)*sizeof(int));
        a[x][a[x][0]]=y;

        at[y][0]++;
        at[y]=(int *) realloc(at[y], (at[y][0]+1)*sizeof(int));
        at[y][at[y][0]]=x;
    }

}


void tip()
{
    int i,j;
    for(i=1; i<=n; i++)
    {
        cout<<i<<"-> ";
        for(j=1; j<=a[i][0]; j++)
            cout<<a[i][j]<<" ";
        cout<<'\n';
    }
}

void bf(int k)
{
    int i;
    v[k]=1;
    for(i=1; i<=a[k][0]; i++)
        if(!v[a[k][i]])
            bf(a[k][i]);
   // pre[++nr]=k;
}

void bft(int k)
{
    int i;
    v[k]=0;
    g<<k<<" ";
    for(i=1; i<=at[k][0]; i++)
        if(v[at[k][i]])
            bft(at[k][i]);
}

int main()
{
    g<<'\n';
    citire();
    //tip();
    int i;
    for(i=1; i<=n; i++)
        if(!v[i])
            bf(i);

    /*for(i=n; i>=1; i--)
        if(v[pre[i]])
        {
            bft(pre[i]);
            cout<<'\n';
        }
    */

    for(i=1; i<=n; i++)
        if(v[i])
        {
            nr+=1;
            bft(i);
            g<<'\n';
        }

    g.close();
    g.open("ctc.out", ios::in | ios::out);
    g<<nr;
    return 0;
}