Pagini recente » Cod sursa (job #3191570) | Cod sursa (job #712667) | Cod sursa (job #2956994) | Cod sursa (job #325097) | Cod sursa (job #416775)
Cod sursa(job #416775)
#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;
}