Cod sursa(job #254166)

Utilizator Andrei_ScorpioAndreiana Andrei Daniel Andrei_Scorpio Data 6 februarie 2009 21:21:31
Problema Componente tare conexe Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.81 kb
#include<stdio.h>
#define Nmax 100010
long aj,nr,n,m,viz[Nmax],viz2[Nmax],vizt[Nmax],st[Nmax],vf;
long sd=1;

struct elem
{
long inf;
elem *urm;
}*a[Nmax],*fin[Nmax],*at[Nmax];

void citire()
{
freopen("ctc.in","r",stdin);
long int x,y,co;
elem *p;
scanf("%ld%ld",&n,&m);
for(int i=0;i<m;i++)
	{
	scanf("%ld%ld",&x,&y);
	p=new elem;
	p->inf=y;
	p->urm=a[x];
	a[x]=p;
	p=new elem;
	p->inf=x;
	p->urm=at[y];
	at[y]=p;
	}
}

/*long caut(elem *p,int ut)
{
 if(ut==1)
 {
	 while(p!=NULL)
	 {
		if(viz[p->inf]==0)
			return p->inf;
		p=p->urm;
	 }
 }
 else
 {
	 while(p!=NULL)
	 {
		if(viz2[p->inf]==0)
			return p->inf;
		p=p->urm;
	 }
 }

 return -1;


}
void parcurg(long in,int ut)
{
 st[0]=in;
 vf=0;
 while(vf>=0)
 {
	if(ut==1)
		aj=caut(a[st[vf]],1);
	else
		aj=caut(at[st[vf]],2);
	if(aj==-1)
	{
		vf--;
	}
	else
	{

		vf++;
		if(ut==1)
			viz[aj]++;
		else
			viz2[aj]++;
		st[vf]=aj;
	}
 }
}

void save(long x)
{
 elem *p;
 int nraj=0;
 for(long i=x;i<=n;i++)
 {
	if(viz[i]==1 && viz2[i]==1)
	{
		vizt[i]=1;
		p=new elem;
		p->inf=i;
		p->urm=fin[nr];
		fin[nr]=p;
		nraj=1;
	}

 }
 if(nraj==0)
 {
	vizt[sd]=1;
	p=new elem;
	p->inf=sd;
	p->urm=fin[nr];
	fin[nr]=p;
 }
}

void init()
{
 for(long i=1;i<Nmax;i++)
 {
	viz[i]=0;
	viz2[i]=0;
 }
}

void program()
{

 while(sd<=n)
 {
	while(vizt[sd]!=0 && sd<=n)
	{
		sd++;
	}
	if(sd<=n)
	{

		parcurg(sd,1);
		parcurg(sd,2);
		save(sd);
		nr++;
		init();
	}
 }
}

void afisare()
{
 freopen("ctc.out","w",stdout);
 elem *p;
 printf("%ld\n",nr);
 for(long i=0;i<nr;i++)
 {
	p=fin[i];
	while(p!=NULL)
	{
		printf("%ld ",p->inf);
		p=p->urm;
	}
 printf("\n");
 }
} */
int main()
{
citire();
while(1)
{
}
//program();
//afisare();
return 0;
}