Cod sursa(job #2576439)

Utilizator Vaida_Radu_AndreiVaida Radu Andrei Vaida_Radu_Andrei Data 6 martie 2020 19:27:42
Problema Sortare topologica Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <cstdio>
#include <vector>
#define verticesMax 51024

using namespace std;

int vertices,grade[verticesMax],vis[verticesMax];
vector <int> graph[verticesMax];

void read() {
    int i,edges,x,y;
    scanf("%d%d",&vertices,&edges);
    for(i=0;i<edges;++i) {
        scanf("%d%d",&x,&y);
        --x;
        --y;
        graph[x].push_back(y);
        ++grade[y];
    }
}

void del(int x) {
    --grade[x];
    if(!grade[x]&&!vis[x]) {
        printf("%d ",x+1);
        ++vis[x];
        for(auto a:graph[x]) {
            del(a);
        }
    }
}

void solve() {
    int i;
    for(i=0;i<vertices;++i) {
        if(!grade[i]&&!vis[i]) {
            printf("%d ",i+1);
            ++vis[i];
            for(auto a:graph[i]) {
                del(a);
            }
        }
    }
}

int main() {
    freopen("sortaret.in","r",stdin);
    freopen("sortaret.out","w",stdout);
    read();
    solve();
    return 0;
}