Cod sursa(job #3033320)

Utilizator RORO123bBarbulescu Robert RORO123b Data 23 martie 2023 18:55:50
Problema Sortare topologica Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
#include <queue>

using namespace std;

ifstream fin("sortaret.in");
ofstream fout("sortaret.out");

const int N=5e4;
const int M=1e5;

struct vecin{
int urm,vf;
}v[M+1];
queue<int>q;

int lst[N+1],nrp[N+1],n,m,nr;

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

int main()
{
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x,y;
        fin>>x>>y;
        adaugare(x,y);
    }
    for(int i=1;i<=n;i++)
    {
        if(nrp[i]==0)
        {
            q.push(i);
        }
    }
    while (!q.empty())
    {
        int x = q.front();
        q.pop();
        fout << x << " ";
        for (int p = lst[x]; p != 0; p = v[p].urm)
        {
            int y = v[p].vf;
            nrp[y]--;
            if (nrp[y] == 0)
            {
                q.push(y);
            }
        }
    }
    return 0;
}