Cod sursa(job #2101347)

Utilizator Mircea_DonciuDonciu Mircea Mircea_Donciu Data 7 ianuarie 2018 12:12:14
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <algorithm>
#include <queue>
using namespace std;
int n,m,i,x,y;
struct vec{int a,b;} w[50005];
vector <int> v[50005];
queue <int> q;
bool comp(vec A, vec B)
{
    return A.a<B.a;
}
int main()
{
    ifstream f("sortaret.in");
    ofstream g("sortaret.out");
    f>>n>>m;
    for(i=1; i<=n; i++)
    {
        v[i].push_back(0);
        w[i].a=1;
        w[i].b=i;
    }
    for(i=1; i<=m; i++)
    {
        f>>x>>y;
        v[x].push_back(y);
        v[x][0]++;
        w[y].a=0;
    }
    for(i=1; i<=n; i++)
    {
        if(w[i].a)
        {
            q.push(i);
        }
    }
    while(!q.empty())
    {
        x=q.front();
        q.pop();
        for(i=1; i<=v[x][0]; i++)
        {
            y=v[x][i];
            if(w[y].a<=w[x].a)
            {
                w[y].a=w[x].a+1;
                q.push(y);
            }
        }
    }
    sort(w+1,w+n+1,comp);
    for(i=1; i<=n; i++) g<<w[i].b<<" ";
    g<<'\n';
    f.close(); g.close();
    return 0;
}