Cod sursa(job #1173878)

Utilizator DuxarFII-Stefan-Negrus Duxar Data 21 aprilie 2014 00:26:15
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#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);
		edge[y].pb(x);
	}
//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);
	}
}