Pagini recente » Cod sursa (job #2674004) | Cod sursa (job #307736) | Cod sursa (job #2214377) | Cod sursa (job #1115546) | Cod sursa (job #797467)
Cod sursa(job #797467)
#include <cstdio>
#include <vector>
#include <list>
using namespace std;
#define LMAX 50010
int N, M;
vector<int> V[LMAX];
list<int> sol;
int inedges[LMAX];
void dfs(int nod) {
int e=V[nod].size(), n;
for (int i=0; i<e; ++i) {
n = V[nod][i];
--inedges[n];
if (!inedges[n]) {
--inedges[n];
sol.push_back(n);
dfs(n);
}
}
}
void topsort() {
for (int i=1; i<=N; ++i)
if (!inedges[i]) {
sol.push_back(i);
dfs(i);
}
}
int main () {
int x,y;
freopen("sortaret.in","rt",stdin);
freopen("sortaret.out","wt",stdout);
scanf("%d %d", &N, &M);
for (int i=0; i<M; ++i) {
scanf("%d %d", &x, &y);
V[x].push_back(y);
++inedges[y];
}
topsort();
for (list<int>::iterator it=sol.begin(); it!=sol.end(); ++it)
printf("%d ", *it);
return 0;
}