Cod sursa(job #416775)

Utilizator s_holmesSherlock Holmes s_holmes Data 13 martie 2010 15:03:17
Problema Componente tare conexe Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include <cstdio>
#include <cstdlib>
#define in "ctc.in"
#define out "ctc.out"
#define NMAX 100001
int N;
int *A[NMAX], *AT[NMAX];
int postord[NMAX], viz[NMAX];

void citire()
{
	int M, x, y;
	scanf("%d%d",&N, &M);
	for(int i = 1 ; i <= N ; i++)
	{
		A[i] = (int *)realloc(A[i], sizeof(int));
		A[i][0] = 0;
		AT[i] = (int *)realloc(AT[i], sizeof(int));
		AT[i][0] = 0;
	}
	
	for(int i = 1 ; i <= M ; i++)
	{
		scanf("%d%d",&x,&y);
		
		A[x] = (int *)realloc(A[x],(++A[x][0] + 1) * sizeof(int));
		A[x][A[x][0]] = y;
		
		AT[y] = (int *)realloc(AT[y],(++AT[y][0] + 1) * sizeof(int));
		AT[y][A[y][0]] = x;
	}
	for(int i = 1 ; i <= N ; i++)
	{
		for(int j = 1 ; j <= A[i][0] ; j++)
			printf("%d ",A[i][j]);
		printf("\n");
	}
	printf("\n\n\n");
	for(int i = 1 ; i <= N ; i++)
	{
		for(int j = 1 ; j <= AT[i][0] ; j++)
			printf("%d ",AT[i][j]);
		printf("\n");
	}
}

void DFST(int x)
{
	viz[x] = 0;
	printf("%d ",x);
	for(int i = 1 ; i <= AT[x][0] ; i++)
		if(viz[AT[x][i]])
			DFST(AT[x][i]);
}

void DFS(int x)
{
	viz[x] = 1;
	for(int i = 1 ; i <= A[x][0] ; i++)
		if(!viz[A[x][i]])
			DFS(A[x][i]);
}

int main()
{
	freopen(in,"r",stdin);
	freopen(out,"w",stdout);
	citire();
	for(int i = 1 ; i <= N ; i++)
		if(!viz[i])
			DFS(i);
		
	for(int i = N ; i ; i--)
	{
		DFST(postord[i]);
		printf("\n");
	}
	
	return 0;
}