Cod sursa(job #1119618)

Utilizator oprea1si2si3Oprea Sebastian oprea1si2si3 Data 24 februarie 2014 18:54:41
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<fstream>
#include<iostream>
#include<vector>
using namespace std;

vector <int> v[50005];
int N,M,deg[50005],q[50005],a;

void citire() {

    ifstream in("sortaret.in");
    int i,x,y;
    in>>N>>M;
    for(i=1;i<=M;i++){
        in>>x>>y;
        v[x].push_back(y);
        deg[y]++;
    }
    in.close();

}

void solve() {

    int x,i,j,vecin;

    for(i=1;i<=N;i++)
        if(deg[i]==0){
            a++;
            q[a]=i;
        }

    for(i=1;i<=N;i++) {
        x=q[i];
        for(j=0;j<v[x].size();j++) {
            vecin=v[x][j];
            cout<<vecin<<" "<<x<<'\n';
            deg[vecin]--;
            if(deg[vecin]==0){
                a++;
                q[a]=vecin;
            }
        }
    }

}

void afisare() {

    ofstream out("sortaret.out");
    int i;
    for(i=1;i<=N;i++)
        out<<q[i]<<' ';
    out<<'\n';
    out.close();

}

int main() {

    citire();
    solve();
    afisare();
    return 0;

}