Cod sursa(job #1038076)

Utilizator andreip1996Paun Andrei andreip1996 Data 20 noiembrie 2013 23:08:45
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <stack>

using namespace std;

vector <int> L[50002];
stack <int>S;
int viz[50002];
int n,m;

void read_data()
{
   freopen("sortaret.in","r",stdin);
   scanf("%d%d",&n,&m);
   int x,y;
   for(int i=1;i<=m;i++)
       {
           scanf("%d%d",&x,&y);
           L[x].push_back(y);
       }
}

void DF(int v)
{
    viz[v]=1;
    vector <int>::iterator it;
    for(it=L[v].begin();it!=L[v].end();it++)
        if(!viz[*it])
                DF(*it);
    S.push(v);
}

void write_data()
{
   freopen("sortaret.out","w",stdout);
   while(!S.empty())
    {
        printf("%d ",S.top());
        S.pop();
    }
}

int main()
{
    read_data();
    for(int i=1;i<=n;i++)
        if(!viz[i])
            DF(i);
    write_data();
    return 0;
}