fbpx

Problema #1861 – TopSort – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Se dă un graf orientat aciclic cu N noduri numerotate de la 1 la N. Să se realizeze o sortare topologică a nodurilor.

Date de intrare

Fișierul de intrare topsort.in conține pe prima linie numerele N M, reprezentând numărul de noduri și numărul de arce din graf, iar pe următoarele M linii câte o pereche de noduri i j, cu semnificația că în graf există arcul (i j).

Date de ieșire

Fișierul de ieșire topsort.out va conține pe prima linie cele N noduri ale grafului, separate prin exact un spațiu, în ordinea dată de sortarea topologică.

Restricții și precizări

  • 1 ≤ N ≤ 100000
  • 1 ≤ M ≤ 400000

Exemplu

topsort.in

7 10
1 2
2 5
3 4
3 5
4 5
7 1
7 2
7 4
7 5
7 6

topsort.out

7 6 3 4 1 2 5 

Explicație

#include <bits/stdc++.h>

using namespace std;

ifstream cin("topsort.in");
ofstream cout("topsort.out");

vector <int> G[100001];
vector <int> L;
int n , m , x , y , v[100001];

void dfs(int nod)
{
    v[nod] = 1;
    for(auto i : G[nod])
        if(!v[i]) v[i] = 1 , dfs(i);
    L.push_back(nod);
}

int main()
{
    cin >> n >> m;
    for(int i = 1 ; i <= m ; i++)
    {
        cin >> x >> y;
        G[x].push_back(y);
    }

    for(int i = 1 ; i <= n ; i++)
        if(!v[i]) dfs(i);

    for(int i = L.size() - 1 ; i >= 0 ; i--)
        cout << L[i] << " ";
}
Comentarii

S-ar putea sa iti placa