Cod sursa(job #1142140)

Utilizator myshuSpatariu Mihai-Constantin myshu Data 13 martie 2014 15:50:33
Problema Componente biconexe Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include<fstream>
using namespace std;
struct nod{int info ;
			nod * urm;}v[100001],*p,*w[100001];
int cc[200001],poz[100001],poz2[100001],c[100001];
void df(int x,int y)
{
	nod *q;
	q=&v[x];
		while(q->urm!=NULL)
		{
			if(poz[q->urm->info]!=0){if(q->urm->info!=y&&c[q->urm->info]==0)c[x]=q->urm->info;}
			else {poz[q->urm->info]=x;
				  df(q->urm->info,x);}
			if(q!=NULL)q=q->urm;
			if(q==NULL)break;
		}
}
int main()
{
	int n,m,x,y,u=0,i,k=0;
	ifstream fcin("biconex.in");
	ofstream fcout("biconex.out");
	fcin>>n>>m;
	for(i=1;i<100001;i++)
		{v[i].info=0;v[i].urm=NULL;w[i]=&v[i];}
	for(i=1;i<=m;i++)
	{	fcin>>x>>y;
		v[x].info++;
		p=new nod;
		p->info=y;
		p->urm=NULL;
		w[x]->urm=p;
		w[x]=p;
		v[y].info++;
		p=new nod;
		p->info=x;
		p->urm=NULL;
		w[y]->urm=p;
		w[y]=p;
	}	
	poz[1]=-1;
	df(1,-1);
	x=n;
	while(x!=1)
	{
		if(poz2[x]==0)
		if(c[x]!=0)
			{y=x;k++;
			 while(y!=c[x])
			 {cc[++u]=y;
			  poz2[y]=1;
			  y=poz[y];}
			 cc[++u]=y;
			 cc[++u]=-1;
			}
		x--;
	}
	x=n;
	while(x!=1)
	{
		if(poz2[x]==0&&c[x]==0){k++;cc[++u]=x;poz2[x]=1;cc[++u]=poz[x];cc[++u]=-1;}
		x--;
	}
	fcout<<k<<'\n';
	u=1;
	while(k!=0)
	{
		while(cc[u]!=-1)
			{fcout<<cc[u]<<' ';u++;}
		fcout<<'\n';u++;
		k--;
	}
	return 0;
}