Cod sursa(job #645119)

Utilizator 1994Barbulescu Daniel 1994 Data 8 decembrie 2011 16:41:18
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <cstdio>
#include <algorithm>
#include <vector>
#include <stack>
#define N 50005
using namespace std;

vector <int> g[N];
int n,m,viz[N];
stack <int> s;

void read()
{
    int x,y;
    scanf("%d %d",&n,&m);
    for (int i=1;i<=m;i++)
    {
        scanf("%d %d",&x,&y);
        g[x].push_back(y);
    }
}

void adanc(int p)
{
    viz[p]=1;
    for (int i=0;i<g[p].size();i++)
    {
        if (viz[g[p][i]]==0)
            adanc(g[p][i]);
    }
    s.push(p);
}

void afis()
{
    while (!s.empty())
    {
        int k=s.top();
        printf("%d ",k);
        s.pop();
    }
}

int main()
{
    freopen("sortaret.in","r",stdin);
    freopen("sortaret.out","w",stdout);
    read();
    for (int i=1;i<=n;i++)
        if (viz[i]==0){
            adanc(1);
            afis();
        }

    return 0;
}