Cod sursa(job #1347321)

Utilizator stefantrettTrett Stefan stefantrett Data 18 februarie 2015 21:46:39
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <stdio.h>
#include <vector>
#include <queue>
#define Nmax 50005

using namespace std;

vector<int> G[Nmax];
queue<int> Q;

int n, m;
int gri[Nmax]; ///gradul interior

void citire()
{
    int x, y;
    scanf("%d %d\n", &n, &m);
    for(int i=1;i<=m;++i)
    {
        scanf("%d %d\n", &x, &y);
        G[x].push_back(y);
        gri[y]++;
    }
}

void prelucrare()
{
    for(int i=1;i<=n;++i)
        if(gri[i] == 0)
            Q.push(i);

    while(!Q.empty())
    {
        int p = Q.front();
        Q.pop();
        printf("%d ", p);

        for(vector<int>::iterator it = G[p].begin(); it != G[p].end(); ++it)
        {
            gri[*it]--;
            if(gri[*it] == 0)
                Q.push(*it);
        }
    }
}

int main()
{
    freopen("sortaret.in", "r", stdin);
    freopen("sortaret.out", "w", stdout);

    citire();
    prelucrare();

    return 0;
}