Cod sursa(job #130508)

Utilizator alex_dincaDinca Alexandru-Nicolae - UPB alex_dinca Data 1 februarie 2008 13:25:30
Problema Strazi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<fstream.h>
#include<alloc.h>

#define nmax 256

int *a[nmax], *comp[nmax], n, m, x, y, nr=0;
int viz[nmax];

void citire(){
     ifstream fin("strazi.in");
     fin>>n>>m;
     for(int i=1; i<=n; i++){
	a[i]=(int*)realloc(a[i],sizeof(int));
	a[i][0]=0;
	comp[i]=(int*)realloc(comp[i],sizeof(int));
        comp[i][0]=0;
	}
     for(int p=1; p<=m; p++) {
	fin>>x>>y;
	a[x][0]++;
	a[x]=(int *)realloc(a[x], (a[x][0]+1)*sizeof(int));
	a[x][a[x][0]]=y;
	}
}

void df(int x){
comp[nr][0]++;
comp[nr]=(int*)realloc(comp[nr],(comp[nr][0]+1)*sizeof(int));
comp[nr][comp[nr][0]]=x;
viz[x]=1;
for(int i=1; i<=a[x][0]; i++)
   if(!viz[a[x][i]]) {
      df(a[x][i]);
      break;
      }
}

int main(){
    citire();
    for(int i=1; i<=n; i++)
       if (!viz[i]) {
	  nr++;
	  df(i);
       }
    ofstream fout("strazi.out");
    fout<<nr-1<<'\n';
    for(i=1; i<nr; i++) fout<<comp[i][comp[i][0]]<<' '<<comp[i+1][1]<<'\n';
    for(i=1; i<=nr; i++)
       for(int j=1; j<=comp[i][0]; j++) fout<<comp[i][j]<<' ';
    fout<<'\n';
    fout.close();
    return 0;
}