Cod sursa(job #3235826)

Utilizator popescu_georgePopescu George popescu_george Data 21 iunie 2024 21:20:34
Problema Sortare topologica Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include<bits/stdc++.h>
using namespace std;
ifstream F("sortaret.in");
ofstream G("sortaret.out");
#define Z 2048
int m,x[50001],y[50001],i,n,j,k,p=Z,q,g[50001],l,a[5];
pair<int,int> h[100001];
char s[Z],t[Z];
inline char A()
{
    if(p==Z)
        F.read(s,Z),p=0;
    return s[p++];
}
int B()
{
    char c;
    for(c=A();!isdigit(c);c=A());
    int n=0;
    for(;isdigit(c);n=n*10+c-48,c=A());
    return n;
}
inline void C()
{
    if(q==Z)
        G.write(t,Z),q=0;
}
int main()
{
    for(n=B(),m=B(),i=1;i<=m;j=B(),k=B(),h[i]={k,x[j]},x[j]=i++,++g[k]);
    for(i=1;i<=n;++i)
        if(!g[i])
            y[++l]=i;
    for(i=1;i<=n;++i)
        for(j=x[y[i]];j;j=h[j].second)
            if(--g[h[j].first],!g[h[j].first])
                y[++l]=h[j].first;
    for(i=1;i<=n;t[q++]=' ',C(),++i) {
        for(j=y[i],k=0;j;a[k++]=j%10,j/=10);
        for(;k;t[q++]=a[--k]+48,C());
    }
    return G.write(t,q),0;
}