Pagini recente » Cod sursa (job #2423611) | Cod sursa (job #397236) | Cod sursa (job #1009325) | Cod sursa (job #966950) | Cod sursa (job #2529484)
#include <iostream>
#include <fstream>
using namespace std;
const int N = 100001;
int n, m, nr, q[N], nrp[N];
int vf[2 * N], lst[N], urm[2 * N];
bool viz[N];
int st[N];
int varf;
ifstream in("sortaret.in");
ofstream out("sortaret.out");
void add(int x, int y) {
vf[++nr] = y;
urm[nr] = lst[x];
lst[x] = nr;
nrp[y]++;
}
struct comp{
int x, y;
}v[N];
void dfs(int x);
//rezolvarea cu bfs
int main() {
//int st = 0, dr = -1;
in >> n >> m;
for (int i = 1; i <= m; i++) {
in >> v[i].x >> v[i].y;
add(v[i].x, v[i].y);
}
//for (int i = 1; i <= n; i++)
// if (nrp[i] == 0) q[++dr] = i;
for (int i = 1; i <= n; i++)
if (!viz[i]) dfs(i);
for (int i = 1; i <= n; i++) out << st[i] << ' ';
/*
int x, y;
while (st <= dr) {
x = q[st++];
//prelucram x
for (int p = lst[x]; p != 0; p = urm[p]) {
y = vf[p];
nrp[y]--;
if (nrp[y] == 0) q[++dr] = y;
}
}
for (int i = 0; i < n; i++) out << q[i] << ' ';
*/
return 0;
}
//rezolvarea cu dfs
void dfs(int x) {
viz[x] = true;
int y;
for (int p = lst[x]; p != 0; p = urm[p]) {
y = vf[p];
if (!viz[y]) dfs(y);
}
st[++varf] = x;
}