Pagini recente » Arhiva de probleme | Cod sursa (job #3290362) | Cod sursa (job #2969618) | Cod sursa (job #371229) | Cod sursa (job #2667881)
#include <iostream>
#include<fstream>
#include<vector>
using namespace std;
ifstream f ("sortaret.in");
ofstream g ("sortaret.out");
vector<int> a[50005];
bool viz[50005];
int n,m,stiva[50005],k=0;
void citire()
{
int x,y;
f>>n>>m;
while(m)
{
f>>x>>y;
a[x].push_back(y);
m--;
}
}
void DFS(int x)
{
viz[x] = true;
for(auto it: a[x])
if(!viz[it])
DFS(it);
///Prin parcurgerea prin DFS nodurile care raman in stiva
///vor reprezenta o sortare (invers) topologica, deoarece se respecta conditia
stiva[++k] = x;
}
int main()
{
citire();
for (int i = 1; i <= n; i++)
if (!viz[i])
DFS(i);
///In stiva nodurile raman in ordine inversa, asa ca afisam array-ul invers
for(int i=n;i>=1;i--)
g<<stiva[i]<<" ";
f.close();
g.close();
return 0;
}