Cod sursa(job #1165939)

Utilizator ArmandNMArmand Nicolicioiu ArmandNM Data 3 aprilie 2014 01:23:06
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
#include <vector>

const int NMAX = 50005;

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

int N,M,gr[NMAX],Q[NMAX],nod,x,y;
vector <int> v[NMAX];

void BFS()
{
    for (int i = 1; i <= N; ++i)
    {
        if (gr[i] == 0)
            Q[ ++Q[0] ] = i;


        for (int i = 1; i <= N; ++i)
        {
            nod = Q[i];

            for (int j = 0; j < v[nod].size(); ++j)
            {
                gr[v[nod][j]]--;
                if (gr[v[nod][j]] == 0)
                    Q[ ++Q[0] ] = v[nod][j];
            }
        }
    }
}

int main()
{
    f >> N >> M;
    for (int i = 1; i <= M; ++i)
    {
        f >> x >> y;
        gr[y]++;
        v[x].push_back(y);
    }

    BFS();

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

    f.close();
    g.close();
    return 0;
}