Cod sursa(job #2126494)

Utilizator albucristianAlbu Cristian-Gabriel albucristian Data 9 februarie 2018 17:58:31
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream in("sortaret.in");
ofstream out("sortaret.out");
int q[500002],gr_ex[500002];
vector <int> g[500002];
int n,m,i,j,a,b,x;
void read()
{
    in>>n>>m;
    for(i=1;i<=m;i++)
    {
        in>>a>>b;
        g[a].push_back(b);
        gr_ex[b]++;
    }
}
void solve()
{
    vector<int>::iterator it;
    for(i=1;i<=n;i++)
    {
        if(gr_ex[i]==0)
        {
            q[++q[0]]=i;
        }
    }
    for(i=1;i<=n;i++)
    {
        x=q[i];
        for(it=g[x].begin();it!=g[x].end();++it)
        {
            gr_ex[*it]--;
            if(gr_ex[*it]==0)
            {
                q[++q[0]]=*it;
            }
        }
    }
}
void write()
{
    for(i=1;i<=n;i++)
    {
        out<<q[i]<<" ";
    }
}
int main()
{
    read();
    solve();
    write();
    return 0;
}