Cod sursa(job #278063)

Utilizator Scorpion[email protected] Scorpion Data 12 martie 2009 08:47:39
Problema Componente tare conexe Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream.h>
#include<fstream.h>
int n,a[10000],b[10000],i,j,nr,m, c[10000];

ifstream f("ctc.in");
ofstream h("ctc.out");
struct nod{
			  int inf;
			  nod *dr;
			  };
nod *l[10000],*r[10000];

void citire()
{nod *d;int y,x,i;
f>>n>>m;
for(i=1;i<=m;i++)
		  {f>>x>>y;
			d=new nod;
			d->inf=y;
			d->dr=l[x];
			l[x]=d;
			d=new nod;
			d->inf=x;
			d->dr=r[y];
			r[y]=d;
			}
}

void bf1(int x)
	  {int u=1,p=1;
		nod *d;
		c[p]=x;
		while(p<=u)
					 {d=l[c[p]];
					  while(d!=NULL)
								 {if(a[d->inf]==0) {c[++u]=d->inf;a[d->inf]=nr;}
									d=d->dr;
								 }
					  p++;
					  }
		}
void bf2(int x)
	  {int u=1,p=1;
		nod *d;
		c[p]=x;
		while(p<=u)
					 {d=r[c[p]];
					  while(d!=NULL)
								 {if(b[d->inf]==0) {c[++u]=d->inf;b[d->inf]=nr;}
									d=d->dr;
								 }
					  p++;
					  }
		}

int main()
{citire();
nr=1;
for(i=1;i<=n;i++)
	 if(a[i]==0)
				{a[i]=b[i]=nr;
				 bf1(i);bf2(i);

				  for(j=1;j<=n;j++)
					  if(a[j]!=b[j])
							a[j]=b[j]=0;
				  nr++;
				 }
h<<nr-1<<'\n';
for(i=1;i<nr;i++)
	 {for(j=1;j<=n;j++)
			 if(a[j]==i)  h<<j<<" " ;
		h<<'\n';
	 }
return 0;
 }