Cod sursa(job #735254)

Utilizator visanrVisan Radu visanr Data 15 aprilie 2012 22:17:34
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <vector>
using namespace std;


#define nmax 50001

struct edge
{
       vector<long> neighbour;
};
edge nodes[nmax];
long tdesc[nmax],t=0,n,m,x,y;
int used[nmax];


void read_input()
{
     scanf("%ld %ld", &n,&m);
     for(int i=0;i<m;i++)
     {
             scanf("%ld %ld", &x,&y);
             nodes[x].neighbour.push_back(y);
     }
}

void DFS(long start)
{
     used[start]=1;
     t++;
     tdesc[start]=t;
     for(int i=0;i<nodes[start].neighbour.size();i++)
     {
             if(used[nodes[start].neighbour[i]]==0)
             {
                                                   DFS(nodes[start].neighbour[i]);
             }
     }
}

int main()
{
    freopen("sortaret.in","r",stdin);
    freopen("sortaret.out","w",stdout);
    int i;
    read_input();
    for(i=1;i<=n;i++) if(used[i]==0) DFS(i);
    for(i=1;i<=n;i++) printf("%ld ", tdesc[i]);
    return 0;
}