Cod sursa(job #1893478)

Utilizator gabrielamoldovanMoldovan Gabriela gabrielamoldovan Data 25 februarie 2017 18:31:09
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

#define nmax 50005

using namespace std;

ifstream f("sortaret.in");
ofstream g("sortaret.out");

vector <int> a[nmax];
int Q[nmax];
int n, m, d[nmax];

void citire()
{
    f>>n>>m;
    int x, y;
    for(int i=1; i<=m; ++i)
    {
        f>>x>>y;
        a[x].push_back(y);
        d[y]++;
    }
}

void sortare()
{
    for(int i=1; i<=n; ++i)
    {
        if(d[i]==0) Q[++Q[0]]=i;
    }
    for(int i=1; i<=n; ++i)
    {
        int x=Q[i];
        for(vector<int>::iterator it=a[x].begin(); it!=a[x].end(); ++it)
        {
            d[*it]--;
            if(d[*it]==0) Q[++Q[0]]=*it;
        }
    }
}

void afisare()
{
    for(int i=1; i<=n; ++i)
    {
        g<<Q[i]<<" ";
    }
}

int main()
{
    citire();
    sortare();
    afisare();
    return 0;
}