Cod sursa(job #2419666)

Utilizator boguklMirzea Bogdan bogukl Data 9 mai 2019 10:38:17
Problema Sortare topologica Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

vector<int> sortare_top(vector<int>&grad_i,vector<vector<int> >&graf)
{
    queue<int> q;

    for(int i=1;i<grad_i.size();i++)
    {
        if(grad_i[i]==0)
        {
            q.push(i);
            grad_i[i]--;
        }
    }
    vector<int>sortat;
    while(!q.empty())
    {
        int ind=q.front();
        sortat.push_back(ind);
        //cout<<ind<<' ';

        q.pop();
        for(auto x:graf[ind])
        {
            grad_i[x]--;
            if(grad_i[x]==0)
            {
                q.push(x);
                grad_i[x]--;
            }
        }
    }
    return sortat;
}

int main()
{

    ifstream fin("sortaret.in");
    ofstream fout("sortaret.out");


    int n,m;
    fin>>n>>m;




    vector<vector<int> >graf(n+1);
    vector<int>grad_i(n+1,0);

    for(int i=0;i<m;i++)
    {
        int a,b;
        fin>>a>>b;
        graf[a].push_back(b);

        grad_i[b]++;
    }
    for(int i=0;i<grad_i.size();i++)
        cout<<grad_i[i]<<' ';
    vector<int>sortat=sortare_top(grad_i,graf);

    if(sortat.size()==n)
    {
        for(int i=0;i<sortat.size();i++)
            fout<<sortat[i]<<' ';
    }

    fin.close();
    fout.close();
    return 0;
}