Cod sursa(job #1803030)

Utilizator MaraaMMihali Mara MaraaM Data 10 noiembrie 2016 21:37:25
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream f("sortaret.in");
ofstream g("sortaret.out");
#define NMax 50005
vector<int> G[NMax];
int Q[NMax];
int gr[NMax],n,m;
void read()
{
    f>>n>>m;
    for(int i=1; i<=m; ++i)
    {
        int a,b;
        f>>a>>b;
        G[a].push_back(b);
        gr[b]++;
    }
    for(int i=1;i<=n;++i) g<<gr[i]<<' ';
    g<<endl;

}
void solve()
{
    vector<int>::iterator it;
    int i,x;
    for(i=1; i<=n; ++i)
        if(gr[i]==0) Q[++Q[0]]=i;
    for(i=1; i<=n; ++i)
    {
        x=Q[i];
        for(it=G[x].begin(); it!=G[x].end(); ++it)
        {
            gr[*it]--;
            if(gr[*it]==0) Q[++Q[0]]=*it;
        }
    }

}
void write()
{
    for(int i=1; i<=n; ++i) g<<Q[i]<<' ';
}
int main()
{
    read();
    solve();
    write();
    return 0;
}