Pagini recente » Cod sursa (job #2208859) | Cod sursa (job #2856497) | Cod sursa (job #2747646) | Cod sursa (job #2865562) | Cod sursa (job #2405497)
#include <fstream>
using namespace std;
ifstream f("sortaret.in");
ofstream g("sortaret.out");
#define dim 8192
int pz;
char ax[dim];
void cit(int &x) {
x = 0;
while (ax[pz] < '0' || ax[pz] > '9')
if (++pz == dim) f.read(ax,dim), pz = 0;
while (ax[pz] >= '0' && ax[pz] <= '9') {
x = x * 10 + ax[pz] - '0';
if (++pz == dim) f.read(ax,dim), pz = 0;
}
}
int n, m, t[50001], a[100001], b[100001];
bool u[50001];
int find(int i) {
if (t[i] != i) t[i] = find(t[i]);
return t[i];
}
void uneste(int i, int j) {
i = find(i);
j = find(j);
if (i == j) return;
t[i] = j;
}
void afis(int i) {
if (u[i]) return;
if (t[i] == i) {g << i << ' '; u[i] = 1; return;}
if (u[t[i]]) {g << i << ' '; u[i] = 1; return;}
afis(t[i]);
g << i << ' ';
u[i] = 1;
}
int main()
{
cit(n), cit(m);
for (int i = 1; i <= m; ++i) cit(a[i]), cit(b[i]);
for (int i = 1; i <= n; ++i) t[i] = i;
for (int i = 1; i <= m; ++i) {
if (a[i] > t[b[i]]) t[b[i]] = find(a[i]);
}
for (int i = 1; i <= n; ++i) afis(i);
return 0;
}