Cod sursa(job #179524)

Utilizator toni2007Pripoae Teodor Anton toni2007 Data 16 aprilie 2008 00:06:01
Problema Sortare topologica Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.57 kb
#include <stdio.h>
#include <stdlib.h>
#define N 50010
int *cine[N],*cost[N],cati[N],vecini[N],n,m,L[N],nr,Q[N],nrq;
void scan(){
     int i,x,y,c;
     freopen("sortaret.in","r",stdin);
     freopen("sortaret.out","w",stdout);
     scanf("%d%d",&n,&m);nrq=n;
     for (i=1;i<=m;++i){
         scanf("%d%d",&x,&y);
         ++vecini[x];
     }
     fclose(stdin);
     for (i=1;i<=n;++i){
         cine[i]=(int*)malloc(vecini[x]+3);
         Q[i]=i;
     }
     freopen("sortaret.in","r",stdin);
     freopen("sortaret.out","w",stdout);
     scanf("%d%d",&n,&m);
     for (i=1;i<=m;++i){
         scanf("%d%d",&x,&y);
         ++cati[x];
         cine[x][cati[x]]=y;
     }
}
void t_sort(){
     int i,x,y=1;
     while(y<=nrq){
         if (Q[y]!=-1){
            x=Q[y];
            ++y;
            ++nr;
            L[nr]=x;
            for (i=1;i<=cati[x];++i)
                if (cine[x][i]!=-1){
                   if (vecini[cine[x][i]]==0){
                      ++nr;
                      Q[cine[x][i]]=-1;
                      L[nr]=cine[x][i];
                   }
                   --vecini[x];
                   cine[x][i]=-1;
                }
         }
         else
             ++y;
     }
}
void print(){
     int i,j;
     for (i=1;i<=n;++i)
         printf("%d ",L[i]);
     /*for (i=1;i<=n;++i){
         for (j=1;j<=cati[i];++j)
             printf("%d ",cine[i][j]);
         printf("\n");
     }*/
     fclose(stdin);
     fclose(stdout);
     exit(0);
}
int main(){
    scan();
    t_sort();
    print();
}