Cod sursa(job #1997461)

Utilizator eugen_cuticCutic Eugen eugen_cutic Data 4 iulie 2017 13:34:14
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <iostream>
#include <fstream>

using namespace std;

const int N=100001;
const int M=200001;

int nr, n, m;
int lst[N], vf[2*M], urm[2*M], nrp[N], q[N];



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

}



int main()
{
    ifstream in("sortaret.in");
    ofstream out("sortaret.out");

    int x, y, poz;
    in>>n>>m;

    for(int i=1; i<=m; i++)
    {
        in>>x>>y;
        adauga(x,y);
    }

    int p=1, u=0;

    for(int i=1; i<=n; i++)
    {
        if( nrp[i]==0 )
            q[++u]=i;
    }
    while(p<=u)
    {
        x=q[p++];
        out << x << " ";
        poz=lst[x];
        while(poz!=0)
        {
            y=vf[poz];
            --nrp[y];
            if(nrp[y]==0)
                q[++u]=y;
            poz=urm[poz];
        }

    }
    /*
    for(int i=0; i<n; i++)
        out<<q[i]<<" ";
    */
    return 0;
}