Cod sursa(job #588429)

Utilizator lily3Moldovan Liliana lily3 Data 7 mai 2011 23:11:14
Problema Componente tare conexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include<fstream>
using namespace std;
ofstream g("ctc.out");

int i,j,n,*a[100001],v[100001],x,y,m,t=0,p[100001],*a2[100001],nr=0,*b[100000];
void dfs(int x)
{
	int i;
	v[x]=1;
	for(i=1;i<=a[x][0];i++)
		if(!v[a[x][i]])
			dfs(a[x][i]);
		p[++t]=x;
}
void dfs1(int x)
{
	int i;
	v[x]=0;
	b[nr][0]++;
	b[nr]=(int *)realloc(b[nr],(b[nr][0]+1)*sizeof(int));
	b[nr][b[nr][0]]=x;
	for(i=1;i<=a2[x][0];i++)
		if(v[a2[x][i]])
			dfs1(a2[x][i]);
		
}
int main()
{
	ifstream f("ctc.in");
	f>>n>>m;
	for(i=1;i<=n;i++)
	{
		a[i]=(int *)realloc(a[i],sizeof(int));
		a[i][0]=0;
		a2[i]=(int *)realloc(a2[i],sizeof(int));
		a2[i][0]=0;
		b[i]=(int *)realloc(b[i],sizeof(int));
		b[i][0]=0;
	}
	for(i=0;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;
		a2[y][0]++;
		a2[y]=(int *)realloc(a2[y],(a2[y][0]+1)*sizeof(int));
		a2[y][a2[y][0]]=x;
	}
	for(i=1;i<=n;i++)
		if(!v[i])
			dfs(i);
		for(i=n;i>=1;i--)
			if(v[p[i]])
				++nr,dfs1(p[i]);
			g<<nr<<"\n";
			for(i=1;i<=nr;i++)
			{
				for(j=1;j<=b[i][0];j++)
					g<<b[i][j]<<" ";
				g<<"\n";
			}
	return 0;
}