Cod sursa(job #1602687)

Utilizator QQQ1911Vodita Stefan QQQ1911 Data 16 februarie 2016 21:24:16
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
using namespace std;
ifstream f("sortaret.in");
ofstream g("sortaret.out");
int n,m,poz[50001],a[50001];
void cit()
{
    int x,y,i,j,p=1;
    f>>n>>m;
    for(i=1; i<=m; ++i)
    {
        f>>x>>y;
        if(poz[x])
        {
            if(poz[y]==0)
            {
                for(j=1; j<=n; ++j)
                    if(poz[j]>poz[x]) ++poz[j];
                poz[y]=poz[x]+1;
                ++p;
            }
            else if(poz[x]>poz[y])
            {
                for(j=1; j<=n; ++j)
                    if(poz[j]>=poz[y]&&poz[j]<poz[x]) poz[j]++;
                poz[x]=poz[y]-1;
            }
        }
        else if(poz[y])
        {
            for(j=1; j<=n; ++j)
                if(poz[j]>=poz[y]) poz[j]++;
            poz[x]=poz[y]-1;
            ++p;
        }
        else
        {
            poz[x]=p++;
            poz[y]=p++;
        }
    }
}
void asezare()
{
    int i;
    for(i=1; i<=n; ++i)
    {
        a[poz[i]]=i;
    }
}
void afis()
{
    int i;
    for(i=1; i<=n; ++i)
        g<<a[i]<<" ";
}
int main()
{
    cit();
    asezare();
    afis();
    f.close();
    g.close();
    return 0;
}