Cod sursa(job #2353621)

Utilizator maria_sinteaMaria Sintea maria_sintea Data 24 februarie 2019 13:54:28
Problema Sortare topologica Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <cstdio>
#include <vector>
#define N 50005

using namespace std;

int n, m, d[N];
vector <int> g[N];
vector <int> sol;

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

void sortare()
{
    sol.clear();
    for(int i=1;i<=n;i++)
        if(!d[i])
            sol.push_back(i);
    for(int i=0;i<n;i++)
    {
        int nod=sol[i];
        for(int i=0;i<g[nod].size();i++)
        {
            int nod2=g[nod][i];
            d[nod2]--;
            if(!d[nod2])
                sol.push_back(nod2);
        }
    }
}

void afisare()
{
    for(int i=0;i<sol.size();i++)
        printf("%d ", sol[i]);
}

int main()
{
    freopen("sortaret.in", "r", stdin);
    freopen("sortaret.out", "w", stdout);

    citire();
    sortare();
    afisare();
    return 0;
}