Cod sursa(job #3286216)

Utilizator Mocanu_Tudor_CristianMocanu Tudor Cristian Mocanu_Tudor_Cristian Data 13 martie 2025 20:32:22
Problema Sortare topologica Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.22 kb
/*#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

ifstream fin("zaruri.in");
ofstream fout("zaruri.out");

#define NMAX 3000
int MOD = 1000003;
int q, n, st, dr, dp[2][6 * NMAX + 1], rez[6 * NMAX + 1], ncurr = 1;

struct Zar
{
    int n, st, dr, poz, s;
}v[100001];

int comp1(Zar a, Zar b)
{
    return a.n < b.n;
}

int comp2(Zar a, Zar b)
{
    return a.poz < b.poz;
}

int main()
{
    fin >> q;
    for(int i = 1; i <= q; i++)
    {
        fin >> v[i].n >> v[i].st >> v[i].dr;
        v[i].poz = i;
        v[i].s = 0;
    }
    sort(v + 1, v + q + 1, comp1);
    for(int i = 1; i <= 6; i++)
        dp[0][i] = 1;
    for(int l = 1; l <= q; l++)
    {
        for(int i = ncurr; i <= v[l].n - 1; i++)
            for(int j = 1; j <= 6 * NMAX + 1; j++)
                for(int f = 1; f <= 6; f++)
                    if(j > f)
                        dp[i % 2][j] = (dp[i % 2][j] + dp[(i - 1) % 2][j - f]) % MOD;
        if(v[l].n == v[l - 1].n)
            v[l].s = (MOD + rez[v[l].dr] - rez[v[l].st - 1]) % MOD;
        else{
        for(int i = 1; i <= 6 * NMAX + 1; i++)
            rez[i] = dp[(v[l].n - 1) % 2][i];
        for(int i = 1; i <= 6 * NMAX + 1; i++)
            rez[i] = (rez[i - 1] + rez[i]) % MOD;
        v[l].s = (MOD + rez[v[l].dr] - rez[v[l].st - 1]) % MOD;
        ncurr = v[l].n;
        }
    }
    sort(v + 1, v + q + 1, comp2);
    for(int i = 1; i <= q; i++)
        fout << v[i].s << '\n';

    return 0;
}
*/
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

ifstream fin("sortaret.in");
ofstream fout("sortaret.out");

int n, m, v[50001], viz[50001], k, x, y;

vector<int> G[50001];


void DFS(int nod)
{
    viz[nod] = 1;
    for(int i = 0; i < G[nod].size(); i++)
    {
        if(viz[G[nod][i]] == 0)
        {
            DFS(G[nod][i]);
        }
    }
    k++;
    v[k] = nod;
}

int main()
{
    fin >> n >> m;
    for(int i = 1; i <= m; i++)
    {
        fin >> x >> y;
        G[x].push_back(y);
    }
    for(int i = 1; i <= n; i++)
        if(viz[i] == 0)
            DFS(i);
    for(int i = k; i >= 1; i--)
        fout << v[i] << " ";

    return 0;
}