Cod sursa(job #1358469)

Utilizator robertstrecheStreche Robert robertstreche Data 24 februarie 2015 17:18:23
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <cstdio>
#include <vector>
#include <queue>

#define NMAX 50005

using namespace std;

int n,m,x,y,grad[NMAX];

vector <int>sol,v[NMAX];
vector <int>::iterator it;
queue <int>q;

inline void sort_top()
{
    while (q.size())
    {
        int nod=q.front();
        q.pop();
        for (vector <int>::iterator it=v[nod].begin();it!=v[nod].end();it++)
         {
            grad[*it]--;
            if (grad[*it]==0)
             {
                sol.push_back(*it);
                q.push(*it);
             }
         }
    }
}
int main()
{
    freopen("sortaret.in","r",stdin);
    freopen("sortaret.out","w",stdout);

    scanf("%d %d",&n,&m);
    for (int i=1;i<=m;i++)
     {
        scanf("%d %d",&x,&y);
        v[x].push_back(y);
        grad[y]++;
     }
    for (int i=1;i<=n;i++)
      if (grad[i]==0)
       q.push(i),sol.push_back(i);
    sort_top();
    for (vector <int>::iterator it=sol.begin();it!=sol.end();it++)
      printf("%d ",*it);

    fclose(stdin);
    fclose(stdout);
}