Cod sursa(job #1990020)

Utilizator patcasrarespatcas rares danut patcasrares Data 9 iunie 2017 23:13:54
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<iostream>
#include<fstream>
#include<string.h>
#include<vector>
#include<queue>
using namespace std;
ifstream fin("sortaret.in");
ofstream fout("sortaret.out");
int n,m,b[50005],nr,c[50005];
vector<int >a[50005];
queue<pair<int,int> >q;
void ve()
{
    int nod;
    while(!q.empty())
    {
        nod=q.front().first;
        c[q.front().second]=nod;
        q.pop();
        for(int i=0;i<a[nod].size();i++)
            if(b[a[nod][i]]!=-1)
            {
                b[a[nod][i]]--;
                if(b[a[nod][i]]!=-1)
                {
                    nr++;
                    q.push(make_pair(a[nod][i],nr));
                }
            }
        b[nod]=-1;
    }
}
int main()
{
    fin>>n>>m;
    for(int h=1;h<=m;h++)
    {
        int i,j;
        fin>>i>>j;
        b[i]++;
        a[i].push_back(j);
    }
    for(int i=1;i<=n;i++)
        if(b[i]!=-1)
        {
            nr++;
            q.push(make_pair(i,nr));
            ve();
        }
    for(int i=1;i<=n;i++)
        fout<<c[i]<<' ';
}