Cod sursa(job #3261982)

Utilizator SerbanCaroleSerban Carole SerbanCarole Data 8 decembrie 2024 01:59:47
Problema Sortare topologica Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <stdio.h>
using namespace std;
const int nmax = 5e4 + 1 , mmax = 1e5 + 1;
int l = 0 , r = -1 , qu[nmax+69];
int start[nmax] , finish[nmax] , n , m , a , b;
int balls[mmax] , b2[mmax];
int in[nmax];
signed main()
{
    freopen("strmatch.in", "r", stdin);
	freopen("strmatch.out", "w", stdout);
    scanf("%d",&n) , scanf("%d",&m);
    for(int i = 1 ; i <= m ; ++i){
        scanf("%d",&a) , scanf("%d",&b);
        in[b]++;
        balls[i] = b;
        if(finish[a]) b2[finish[a]] = i;
        finish[a] = i;
        if(!start[a]) start[a] = i;
    }
    for(int i = 1 ; i <= n ; ++i) if(!in[i]) qu[++r] = i;
    while(l<=r){
        a = qu[l++] , printf("%d ", n);
        for(int i = start[a] ; ; i = b2[i]){
            if(!(--in[balls[i]])) qu[++r] =  balls[i];
            if(b2[i] == 0) break;
        }
    }
    return 0;
}