Pagini recente » Cod sursa (job #2229032) | Cod sursa (job #1619225) | Cod sursa (job #2924544) | Cod sursa (job #2246642) | Cod sursa (job #1173879)
#include <vector>
#include <cstdio>
#include <climits>
#include <algorithm>
using namespace std;
#define ONLINE_JUDGE
#define pb push_back
#define ENTER fprintf(output, "\n");
#define OKK fprintf(output, "ok!\n");
#define all(V) V.begin(), V.end()
#define allr(V) V.rbegin(), V.rend()
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<bool> vb;
#ifdef ONLINE_JUDGE
FILE *input = fopen("sortaret.in", "r");
FILE *output = fopen("sortaret.out", "w");
#else
FILE *input = fopen("input.txt", "r");
FILE *output = stdout;
#endif
int N, M;
vb viz;
vvi edge;
vi ans;
void DFS(int iam);
int main() {
int i, x, y;
//OKK
fscanf(input, "%d %d", &N, &M);
viz.resize(N);
edge.resize(N);
//OKK
for (i = 0; i < M; ++i) {
fscanf(input, "%d %d", &x, &y);
--x; --y;
edge[x].pb(y);
}
//OKK
// for (i = 0; i < N; ++i) {
// fprintf(output, "%d : ", i);
// for (auto &it : edge[i]) {
// fprintf(output, "%d ", it);
// }
// fprintf(output, "\n");
// }
//OKK
for (i = 0; i < N; ++i) {
if (!viz[i]) {
DFS(i);
}
}
//OKK
for_each(allr(ans),[&] (int &x) {
fprintf(output, "%d ", x + 1);
});
fclose(input);
fclose(output);
return 0;
}
void DFS(int iam) {
if (!viz[iam]) {
viz[iam] = true;
for_each(all(edge[iam]), DFS);
ans.pb(iam);
}
}