Cod sursa(job #1997465)

Utilizator humastefan19Huma Stefan humastefan19 Data 4 iulie 2017 13:48:40
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>

#include<fstream>

const int N=100001;
const int M=1000001;

int nr;
int lst[N], q[N],d[N],nrp[N];
int vf[M], urm[M];

using namespace std;

void adaugare(int x, int y)
{
    ++nr;
    nrp[y]++;
    vf[nr]=y;
    urm[nr]=lst[x];
    lst[x]=nr;
}

int main()
{

    ifstream cin("sortaret.in");
    ofstream cout("sortaret.out");
    int n, m, s,i, x, y, p, u, poz;
    cin>>n>>m;
    for(i=1; i<=m; i++)
    {
        cin>>x>>y;
        adaugare(x, y);
    }
    p=0;
    u=-1;
    for(i=1; i<=n; i++)
    {
        if(nrp[i]==0)
        {
            q[++u]=i;
        }
    }
    while(p<=u)
    {
        x=q[p++];
        poz=lst[x];
        cout << x << " ";
        while(poz!=0)
        {
            y=vf[poz];
            --nrp[y];
            if(nrp[y]==0)
            {
                q[++u]=y;
            }
            poz=urm[poz];
        }
    }
    /*
    for(i=1; i<=n; i++)
    {
        cout<<q[i]<<' ';
    }
    */
    return 0;
}